android listview 为每个item上的按钮添加点击事件及处理问题

大侠们 小弟初学android 有这样一个需求 我的一个listview的每一行(item)上都有一个button 需要为该button注册点击事件(已为该activity自定义adapter) 那么如何注册呢 现在我只能在自定义的adapter的getView()方法中为每个item注册点击事件了 可这只是在构造view的过程中注册 此时注册事件 视图没有构造完成 有些属性没法调用 比如 我要求在点击item上的button后产生一dialog(菜单)选择菜单后 刷新activity的view 大侠们 怎么实现 我梦想中最好的想法是要能像web那样在视图渲染完成后在activity中绑定事件那该多好啊 不能能不能实现

2个回答

[quote]点击按钮之后刷新listview上的数据[/quote]
刷新数据,重新查询数据,再绑定listview的adapter就可以刷新了

怎么感觉你说的很乱呢, 你说的是不是就要向按钮上添加一个点击事件?这个根这个按钮在哪的关系不大吧. setonclickListener()这个不好使吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
listview的每个item显示不完全,只显示一个控件。
如题,自定义了一个listview的item的布局,布局是这样的:![图片说明](https://img-ask.csdn.net/upload/201707/14/1500018975_13175.png),上面一个textview,然后下面是3个按钮,按钮下面是2个RadioButton。然后listview所在的布局是这样的:![图片说明](https://img-ask.csdn.net/upload/201707/14/1500019058_118392.png),listview上面是一个textview。但是在实际填充数据的过程中listview的每一个item却只显示了图一中的第一个控件,下面的按钮和复选按钮都没有显示,请问下这是什么原因啊?![图片说明](https://img-ask.csdn.net/upload/201707/14/1500019177_574447.png)
Android 实现listview中的item部分的现实和隐藏
场景:istview中有n个item,每个item中有一个按钮(显示详细信息),当点击这个按钮是,item高度自动增加,并显示详细内容。
listview每个item上的每个button的点击事件都触发了,适配器每次都找了最后一个textview
SimpleAdapter wadapter=new SimpleAdapter(getActivity(), (List<? extends Map<String, ?>>) mapList,R.layout. simplist, new String[]{"name","status","scene"},new int[]{R.id. name,R.id. statustext,R.id. cenery}){ @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null{ convertView=super.getView(position,convertView,parent); holder.button = (Button) convertView.findViewById(R.id. button) convertView.setTag(holder); } else { holder= (Viewholder) convertView.getTag(); } buttonevent();//按钮点击事件 return convertView; } }; 我是在创建simpleadapter时在里面复写了getview方法 然后,无论点击哪一条item上的控件按钮,每次只有最后一个item会被监听
android菜鸟求助:ListView点击删除按钮时,总是最后一个item被删除
如题,我的ListView的每个item都有一个删除按钮,但是每次点击按钮后都是删除了最后一个item。 调试后position是正确的,索引是没有问题的,每次删除的都是正确的位置,而且每次item一删除就调用notifyDataSetChanged()去刷新,这个问题困扰好几天了…麻烦大神帮帮忙。 public View getView(final int position, View view, ViewGroup arg2) { // TODO Auto-generated method stub if(view == null){ view = inflater.inflate(R.layout.mission_item, null); SharedPreferences shared_mission = getSharedPreferences("mission", Activity.MODE_PRIVATE); mission_name = (TextView) view.findViewById(R.id.pro_name); mission_add = (TextView) view.findViewById(R.id.pro_add); mission_phone = (TextView) view.findViewById(R.id.pro_phone); mission_name.setText(shared_mission.getString("name", "")); mission_add.setText(shared_mission.getString("address", "")); mission_phone.setText(shared_mission.getString("phone", "")); } Button del = (Button) view.findViewById(R.id.del); del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { arr.remove(position); mission_adapter.notifyDataSetChanged(); } }); //删除按钮 listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1,final int arg2, long arg3) { Intent intent = new Intent(); intent.setClass(MainActivity.this, MissionInfo.class); startActivity(intent); } }); return view; } }
Android新手急求:ListView点击删除按钮时,总是最后一个item被删除
如题,我的ListView的每个item都有一个删除按钮,但是每次点击按钮后都是删除了最后一个item。 调试后position是正确的,索引是没有问题的,每次删除的都是正确的位置,而且每次item一删除就调用notifyDataSetChanged()去刷新,这个问题困扰好几天了…麻烦大神帮帮忙。 另外我这个MyAdapter类是写在MainActivity类里面的,我是有添加到arr里的,纯粹是为了方便……我不知道是不是这个引起的问题。 public class MyAdapter extends BaseAdapter { private Context context; private LayoutInflater inflater; public ArrayList<String> arr; public MyAdapter(Context context) { super(); this.context = context; inflater = LayoutInflater.from(context); arr = new ArrayList<String>(); } @Override public int getCount() { return arr.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView(final int position, View convertView, ViewGroup arg2) { // TODO Auto-generated method stub ViewHolder viewHolder = null; if(convertView == null){ viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.mission_item, null); viewHolder.mission_name = (TextView) convertView.findViewById(R.id.pro_name); viewHolder.mission_add = (TextView) convertView.findViewById(R.id.pro_add); viewHolder.mission_phone = (TextView) convertView.findViewById(R.id.pro_phone); viewHolder.del = (Button) convertView.findViewById(R.id.del); SharedPreferences shared_mission = getSharedPreferences("mission", Activity.MODE_PRIVATE); viewHolder.mission_name.setText(shared_mission.getString("name", "")); viewHolder.mission_add.setText(shared_mission.getString("address", "")); viewHolder.mission_phone.setText(shared_mission.getString("phone", "")); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.del.setTag(position); viewHolder.del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub arr.remove(position); mission_adapter.notifyDataSetChanged(); } }); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) { Intent intent = new Intent(); intent.setClass(MainActivity.this, MissionInfo.class); startActivity(intent); } }); return convertView; } class ViewHolder { //任务界面 TextView mission_name,mission_add,mission_phone; Button del; } }
android 关于listview convertview的一些问题,求解!
![图片说明](https://img-ask.csdn.net/upload/201603/14/1457947694_116075.png) 做的是一个聊天界面,这是adapter代码。 运行时只能输入一次,输第二次时,参数convertview是第二次view的对象,不知道为什么啊。 ``` package com.example.chattest; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class ChatActivity extends Activity implements OnClickListener { private Button btnSend; private ListView lvChat; private EditText etSendContent; //聊天内容的适配器 private ChatMsgViewAdapter chatMsgAdapter; //聊天内容 private List<ChatMsgInfo> chatMsgDataArrays = new ArrayList<ChatMsgInfo>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //不显示标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.chat); initView(); initData(); } //初始化视图 private void initView() { lvChat = (ListView) findViewById(R.id.chat_listview); btnSend = (Button) findViewById(R.id.btn_send); btnSend.setOnClickListener(this); etSendContent = (EditText) findViewById(R.id.et_sendmessage); } //聊天数据 //private final static int COUNT = 10 private String text = new String("第1种写法果然最慢,第二种写法由于用了StringBuffer,快了很多。奇怪的是" + "第4种写法竟然也很快,比用StringBuffer还快,怎么回事?其实慢,第二种写" + "法由于用了StringBuffer,快了很多。奇怪的是第4种写法竟然也很快,比用StringBuffer还快,怎" + "比用StringBuffer还快,怎么回事?其r还快,怎么回事?其回事?其如果你调试过字符串连接的执行过程就会知"); private String date = new String("2016-3-10 18:11"); //初始化数据 private void initData() { ChatMsgInfo msgExample = new ChatMsgInfo("XiaoMing", date, text, true); chatMsgDataArrays.add(msgExample); chatMsgAdapter = new ChatMsgViewAdapter(this, chatMsgDataArrays); //listview绑定adapter lvChat.setAdapter(chatMsgAdapter); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.btn_send: send(); break; } } //发送按钮的响应函数 private void send() { //获取输入文本框内容 String sendContent = etSendContent.getText().toString(); if (sendContent.length() > 0) { ChatMsgInfo msg = new ChatMsgInfo("XiaoHong", getDate(), sendContent, false); chatMsgDataArrays.add(msg); //通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。 Log.d("chattest", "after setchanged!"); chatMsgAdapter.notifyDataSetChanged(); etSendContent.setText(""); //定位到最后一行 Log.d("chattest", "after setSelection!"); lvChat.setSelection(lvChat.getCount() -1 ); } } //获取时间 private String getDate() { Calendar c = Calendar.getInstance(); String year = String.valueOf(c.get(Calendar.YEAR)); String month = String.valueOf(c.get(Calendar.MONTH)); String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH) + 1); String hour = String.valueOf(c.get(Calendar.HOUR_OF_DAY)); String mins = String.valueOf(c.get(Calendar.MINUTE)); StringBuffer buffer = new StringBuffer(); buffer.append(year + "-" + month + "-" + day + " " + hour + ":" + mins); return buffer.toString(); } } ``` ``` package com.example.chattest; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class ChatMsgViewAdapter extends BaseAdapter { private static final int TYPE_COM_MSG = 0; private static final int TYPE_TO_MSG = 1; //private static final int TAG_KEY_ITEM_TYPE = 0; //private static final int TAG_KEY_VIEWHOLDER = 1; private List<ChatMsgInfo> data;//数据list private LayoutInflater myInflater;//layout convert view对象 private Context context;//环境 //构造 public ChatMsgViewAdapter(Context context, List<ChatMsgInfo> data) { this.context = context; this.data = data; myInflater = LayoutInflater.from(context); } @Override public int getItemViewType(int position) { // TODO Auto-generated method stub ChatMsgInfo msg = data.get(position); if (msg.getMsgType()) { return TYPE_COM_MSG; } else { return TYPE_TO_MSG; } } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } //获取ListView的个数 @Override public int getCount() { return data.size(); } //获取项 @Override public Object getItem(int position) { return data.get(position); } //获取项的id @Override public long getItemId(int position) { return position; } //获取view @Override public View getView(int position, View convertView, ViewGroup parent) { ChatMsgInfo chatMsg = data.get(position);//聊天数据 boolean isComMsg = chatMsg.getMsgType();//数据类型(发送、接收) LeftItemViewHolder leftViewHolder = null; RightItemViewHolder rightViewHolder = null; int viewType = getItemViewType(position); System.out.println(position + " " + convertView); if (convertView == null || ((Integer)convertView.getTag(R.id.tag_item_viewtype)) != viewType) { //区分消息类别,展示不同的界面 if (viewType == TYPE_COM_MSG) { convertView = myInflater.inflate(R.layout.chat_msg_text_left_item, null); leftViewHolder = new LeftItemViewHolder(); leftViewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime); leftViewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username); leftViewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent); leftViewHolder.isComMsg = isComMsg; convertView.setTag(R.id.tag_item_viewholder, leftViewHolder); } else { convertView = myInflater.inflate(R.layout.chat_msg_text_right_item, null); rightViewHolder = new RightItemViewHolder(); rightViewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime); rightViewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent); rightViewHolder.isComMsg = isComMsg; convertView.setTag(R.id.tag_item_viewtype, rightViewHolder); } convertView.setTag(R.id.tag_item_viewtype, viewType); } else { if (viewType == TYPE_COM_MSG) { leftViewHolder = (LeftItemViewHolder) convertView.getTag(R.id.tag_item_viewholder); } else { rightViewHolder = (RightItemViewHolder) convertView.getTag(R.id.tag_item_viewholder); } } if (viewType == TYPE_COM_MSG) { leftViewHolder.tvUserName.setText(chatMsg.getName()); leftViewHolder.tvSendTime.setText(chatMsg.getDate()); leftViewHolder.tvContent.setText(chatMsg.getText()); } else { rightViewHolder.tvSendTime.setText(chatMsg.getDate()); rightViewHolder.tvContent.setText(chatMsg.getText()); } System.out.println(position + " " + convertView); return convertView; } //保存项,显示项的内容 static class LeftItemViewHolder { public TextView tvSendTime; public TextView tvUserName; public TextView tvContent; public boolean isComMsg = true; } static class RightItemViewHolder { public TextView tvSendTime; public TextView tvContent; public boolean isComMsg = true; } } ```
android scrollview动态加载数据
先声明不是滑动加载更多数据,我要做一个订单的页面,scrollview里面的内容不确定是几条,如果里面嵌套listview,每个item的布局太复杂(包含很多按钮,edittext,下拉菜单等等),很容易冲突,而且item的高度可能超过了一屏幕,scrollview嵌套listview问题又很多,所以请高手帮忙,该如何实现!谢谢各位了!
PagerView的一个子页面里的ListView显示不出来
Android初学者,最近的一个仿QQ的作业,看了网上的做法用PagerView做了个类似QQ那种底部标签栏可以切换页面的样式,然后我在其中一个页面里加了个ListView,在ListView里面放了几项数据,但是显示不出来,困扰了我好久,网上找了好久,就是解决不了,求大神帮忙看看,谢谢谢谢!!! 把listview单独出来运行可以显示,或者在listview所在的布局里添加其他类型的组件也可以显示,维度listview不显示 这是实现三个Tab切换页面的Java代码 ``` import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class Top_bottom extends Activity implements android.view.View.OnClickListener { private ViewPager mViewPager;// 用来放置界面切换 private PagerAdapter mPagerAdapter;// 初始化View适配器 private List<View> mViews = new ArrayList<View>();// 用来存放Tab01-03 // 三个Tab,每个Tab包含一个按钮 private LinearLayout mTabMessage; private LinearLayout mTabContacts; private LinearLayout mTabDynamic; // 三个按钮 private ImageButton mMessageImg; private ImageButton mContactsImg; private ImageButton mDynamicImg; //顶部标题 private TextView textView; //底部标签 private TextView textView_message; private TextView textView_contacts; private TextView textView_dynamic; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.top_bottom); textView=(TextView)findViewById(R.id.top_textview); textView_message=(TextView)findViewById(R.id.textView_message); textView_contacts=(TextView)findViewById(R.id.textView_contacts); textView_dynamic=(TextView)findViewById(R.id.textView_dynamic); initView(); initViewPage(); initEvent(); } private void initEvent() { mTabMessage.setOnClickListener(this); mTabContacts.setOnClickListener(this); mTabDynamic.setOnClickListener(this); mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { /** *ViewPage左右滑动时 */ @Override public void onPageSelected(int arg0) { int currentItem = mViewPager.getCurrentItem(); switch (currentItem) { case 0: textView.setText("消息"); resetImg(); mMessageImg.setBackground(getResources().getDrawable(R.drawable.messages,null)); textView_message.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); break; case 1: textView.setText("联系人"); resetImg(); mContactsImg.setBackground(getResources().getDrawable(R.drawable.contactss,null)); textView_contacts.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); break; case 2: textView.setText("动态"); resetImg(); mDynamicImg.setBackground(getResources().getDrawable(R.drawable.qzones,null)); textView_dynamic.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); break; default: break; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); } /** * 初始化设置 */ private void initView() { mViewPager = (ViewPager) findViewById(R.id.viewpager); // 初始化三个LinearLayout mTabMessage = (LinearLayout) findViewById(R.id.tab_message); mTabContacts = (LinearLayout) findViewById(R.id.tab_contacts); mTabDynamic = (LinearLayout) findViewById(R.id.tab_dynamic); // 初始化三个按钮 mMessageImg = (ImageButton) findViewById(R.id.tab_message_img); mContactsImg = (ImageButton) findViewById(R.id.tab_contacts_img); mDynamicImg = (ImageButton) findViewById(R.id.tab_dynamic_img); } /** * 初始化ViewPage */ private void initViewPage() { // 初始化三个布局 LayoutInflater mLayoutInflater = LayoutInflater.from(this); View message = mLayoutInflater.inflate(R.layout.message, null); View contacts = mLayoutInflater.inflate(R.layout.contacts, null); View dynamic = mLayoutInflater.inflate(R.layout.dynamic,null); mViews.add(message); mViews.add(contacts); mViews.add(dynamic); // 适配器初始化并设置 mPagerAdapter = new PagerAdapter() { @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mViews.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { View view = mViews.get(position); container.addView(view); return view; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getCount() { return mViews.size(); } }; mViewPager.setAdapter(mPagerAdapter); } /** * 判断哪个要显示,及设置按钮图片 */ @Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.tab_message: textView.setText("消息"); mViewPager.setCurrentItem(0); resetImg(); mMessageImg.setBackground(getResources().getDrawable(R.drawable.messages,null)); textView_message.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); break; case R.id.tab_contacts: textView.setText("联系人"); mViewPager.setCurrentItem(1); resetImg(); mContactsImg.setBackground(getResources().getDrawable(R.drawable.contactss,null)); textView_contacts.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); break; case R.id.tab_dynamic: textView.setText("动态"); mViewPager.setCurrentItem(2); resetImg(); mDynamicImg.setBackground(getResources().getDrawable(R.drawable.qzones,null)); textView_dynamic.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); break; default: break; } } /** * 把所有图片变暗 */ private void resetImg() { mMessageImg.setBackground(getResources().getDrawable(R.drawable.message,null)); mContactsImg.setBackground(getResources().getDrawable(R.drawable.contacts,null)); mDynamicImg.setBackground(getResources().getDrawable(R.drawable.qzone,null)); textView_message.setTextColor(getResources().getColor(R.color.colorfont)); textView_contacts.setTextColor(getResources().getColor(R.color.colorfont)); textView_dynamic.setTextColor(getResources().getColor(R.color.colorfont)); } public void onBackPressed() { Intent intent = new Intent(); intent.setAction("android.intent.action.MAIN"); intent.addCategory("android.intent.category.HOME"); startActivity(intent); } } ``` ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/activity_top"></include> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> <include layout="@layout/activity_bottom"></include> </LinearLayout> ``` 这是实现ListView的Java代码 ``` import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ListView; import android.widget.SimpleAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Dynamic extends AppCompatActivity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dynamic); listView=(ListView)findViewById(R.id.listview_dynamic); String title[]={"好友动态","退出QQ"}; int img[]={R.drawable.qqzone,R.drawable.exit}; List<Map<String,Object>> list=new ArrayList<Map<String, Object>>(); //List集合用来封装数据 for (int x=0;x<title.length;x++){ Map<String,Object> map=new HashMap<String,Object>(); map.put("title",getResources().getStringArray(R.array.title)[x]); map.put("img",img[x]); list.add(map); //将封装后的每个Item的数据添加到List集合中 } SimpleAdapter simpleAdapter=new SimpleAdapter(Dynamic.this,list,R.layout.dynamic_style, new String[]{"title","img"},new int[]{R.id.textView21,R.id.imageView2}); listView.setAdapter(simpleAdapter); } } ```
android开发中,想实现点击ImageButton切换它的图片。
开发时使用adapter把数据更新到listview。每一个Item都有一个按钮,onClicka时, v.findViewById(R.id.button).setBackgroundDrawable( getResources().getDrawable(R.drawable.picB)); 。 关于切换图片遇到几个问题,望各位大神指点一二。 1.布置XML时,设置android:src="@drawable/picA",这种做法点击没有进行图片切换。 2.布置XML时,不设定背景图片,设置adapter时,holder.botton.setBackgroundDrawable(getResources().getDrawable(R.drawable.picA));这种做法,点击图片切换了。但当讲手机画面往下拉直至这个这个切换的按钮看不见,再出现时,图片有变回了原来的图片。 3.布置XML时,不设定背景图片,设置adapter时,((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.picA)); 这种做法,点击图片切换了。但当讲手机画面往下拉直至这个这个切换的按钮看不见,再出现时,变了图片的按钮不是我点击的那个按钮,数目也不对。按钮监听如下: holder.copyBotton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.findViewById(R.id.copybutton) .setBackgroundColor(00000000); v.findViewById(R.id.copybutton).setBackgroundDrawable( getResources().getDrawable(R.drawable.redheart)); } });
给listview的button设置OnClick Listener事件
在屏幕中有一个list view。每一个list item包含两个text view和一个按钮。 点击按钮时,我想用当前选中行的行序号去Vector里面取得一些数据。 这是List Custom Adapter private class CustomAdapter extends ArrayAdapter<ServicesItems> { public CustomAdapter(Context context, int resource, int textViewResourceId, List<ServicesItems> objects) { super(context, resource, textViewResourceId, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; TextView item = null; TextView description = null; Button subNowBtn; ServicesItems ii = getItem(position); if (null == convertView) { convertView = mInflater.inflate( R.layout.list_of_servics_item_2, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } holder = (ViewHolder) convertView.getTag(); // cat_name = holder.gettitle(); Resources resources = getResources(); ServicesItems bean1 = (ServicesItems) servicesVector .elementAt(position); String cat_name_str = bean1.getService_name().toString(); String descreption = bean1.getDescription().toString(); item = holder.getItem(); item.setText(bean1.getDescription()); description = holder.getDescription(); description.setText(bean1.getService_name()); subNowBtn=holder.getSubButton(); return convertView; } private class ViewHolder { private View mRow; private TextView description = null; private TextView item = null; private Button sub = null; public ViewHolder(View row) { mRow = row; } public TextView getDescription() { if (null == description) { description = (TextView) mRow .findViewById(R.id.category_tv); } return description; } public TextView getItem() { if (null == item) { item = (TextView) mRow.findViewById(R.id.descreption_tv); } return item; } public Button getSubButton(){ if(null==sub){ sub=(Button)findViewById(R.id.subscribe_now_btn); } return sub; } } } 可是这段代码实现不了,请问如何获取数据呢?
在listview中找到点击的行,获取数据
我使用自定义的 adapter在ArrayList中显示items。每一行item都2个 textViews和1个按钮。 依据一个属性的状态,在图像按钮上的图像会改变。当点击image button时,如何从行的item(orderID )中或取信息? public class OrderedAdapter extends ArrayAdapter<RMOrder> { private Context context; private RMOrder rowItem; private ListView lv; private int clickedID; private ArrayList<RMOrder>items; private int orderID; private ViewHolder holder; public OrderedAdapter(Context context, int textViewResourceId, List<RMOrder> objects) { super(context, textViewResourceId, objects); this.context = context; } /*private view holder class*/ private class ViewHolder { ImageButton deleteButton; TextView txtMenuName; TextView txtMenuDesc; TextView txtMenuPrice; int orderID; } public View getView(final int position, View convertView, ViewGroup parent) { holder = null; rowItem = getItem(position); LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = mInflater.inflate(R.layout.basket_list_row, null); holder = new ViewHolder(); holder.txtMenuName = (TextView) convertView.findViewById(R.id.menuNameText); holder.txtMenuDesc = (TextView) convertView.findViewById(R.id.menuDetailText); holder.deleteButton = (ImageButton) convertView.findViewById(R.id.menuDelete); holder.txtMenuPrice = (TextView) convertView.findViewById(R.id.menuPrice); holder.orderID = 0; lv = (ListView) convertView.findViewById(R.id.orderedList); convertView.setTag(holder); } else holder = (ViewHolder) convertView.getTag(); String detailsString = ""; double price = rowItem.getPrice(); for (RMOption i : rowItem.getOption()) { detailsString += "-" + i.getName(); price += i.getExtraPrice(); } holder.orderID = rowItem.getId(); holder.txtMenuName.setText(rowItem.getMenuName()); holder.txtMenuDesc.setText(detailsString); holder.txtMenuPrice.setText(Double.toString(price) + " TL"); holder.deleteButton.setFocusable(false); items = new ArrayList<RMOrder>(GlobalList.orderedItemsList.values()); clickedID = items.get(position).getId(); orderID = holder.orderID; //change image of image button if(rowItem.getStatus().equals("pending")){ holder.deleteButton.setImageResource(R.drawable.rsz_pending); holder.deleteButton.setOnClickListener(new OnClickListener() { //TODO Burada tıklananı bulmakta sıkıntı var public void onClick(View v) { //GET ORDER ID } }); else holder.deleteButton.setImageResource(R.drawable.rsz_approved); } return convertView; }
自学Android开发 在模拟器运行闪退
初学者自写的程序 ,但是在模拟器下运行闪退!!该怎么改呀?? package com.example.work3; import java.util.ArrayList; import java.util.List; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.TabActivity; import android.content.DialogInterface; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.StrictMode; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; import android.widget.TabHost; import android.widget.TextView; import android.os.Build; public class MainActivity extends TabActivity { private TabHost tabhost; private ListView listview; private ArrayAdapter<String> arr_adapter; private Spinner spinner; private List<String>list; private ArrayAdapter<String> adapter; private EditText et1,et2; private Button bt; String name; String value; String style; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); et1=(EditText) findViewById(R.id.editText1); et2=(EditText) findViewById(R.id.editText2); bt=(Button) findViewById(R.id.button1); setContentView(R.layout.activity_main); tabhost=getTabHost(); tabhost.addTab(tabhost.newTabSpec("菜单一").setIndicator("首页").setContent(R.id.tab1)); tabhost.addTab(tabhost.newTabSpec("菜单二").setIndicator("新增").setContent(R.id.tab2)); tabhost.addTab(tabhost.newTabSpec("菜单三").setIndicator("账单").setContent(R.id.tab3)); //按钮监听 提取信息 bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub name = et1.getText().toString(); value = et2.getText().toString(); style = spinner.getSelectedItem().toString(); } }); listview = (ListView) findViewById(R.id.listview); //新建适配器 String[]arr_data={"数据1","数据2","数据3","数据4","数据5"}; //ArrayAdapter(上下文,当前ListView加载的每一个列表项所对应的布局文件,数据源) arr_adapter =new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,arr_data); listview.setAdapter(arr_adapter); spinner=(Spinner) findViewById(R.id.spinner); //数据源 String[]list = {"1.日常食品支出","2.人情世故支出","3.出差旅游支出","4.服饰鞋帽支出","5.生活用品支出","6.其他支出"}; //新建适配器 adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); //设置下拉样式 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //加载适配器 spinner.setAdapter(adapter); } //退出对话框 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { // 创建退出对话框 AlertDialog isExit = new AlertDialog.Builder(this).create(); // 设置对话框标题 isExit.setTitle("系统提示"); // 设置对话框消息 isExit.setMessage("确定要退出吗"); // 添加选择按钮并注册监听 isExit.setButton("确定", listener); isExit.setButton2("取消", listener); // 显示对话框 isExit.show(); } return false; } /**监听对话框里面的button点击事件*/ DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序 finish(); break; case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框 break; default: break; } } }; }
android 动态添加了button后,怎么给button设置监听器?
android 动态添加了button后,怎么给button设置监听器? 类似微信一样,我收到了语音消息,我在主界面上添加了一个按钮,这个按钮怎么添加监听器?点击后就可以播放我收到的那条消息。 我已经用listview动态添加item(是一个button)了,就是不知道每一个item怎么设置点击后播放不同的声音。。。 private void send() { if(flag==0)//发送的是文字 { sendContString = mEditTextContent.getText().toString(); if (sendContString.length() > 0) { ChatMsgEntity entity = new ChatMsgEntity(); entity.setDate(getDate()); entity.setName("syskey"); entity.setMsgType(false); entity.setText(sendContString); entity.setKind(1); mDataArrays.add(entity); new Thread(new Runnable() { @Override public void run() { try { new Client().send(ip, port,sendContString,1,Aname,Bname); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } } else//发送的是语音 { ChatMsgEntity entity = new ChatMsgEntity(); entity.setDate(getDate()); entity.setName("syskey"); entity.setMsgType(false);//表示是自己发的 entity.setText(pathWav);//录音后存放的声音的地址 entity.setKind(2);//种类是2表示是声音 mDataArrays.add(entity); } mAdapter.notifyDataSetChanged();//刷新 mEditTextContent.setText(""); mListView.setSelection(mListView.getCount() - 1);//指向最后一个 } /////////////////////分割线//////////////////////////// package com.myweixin; import android.R.integer; import android.content.Context; import android.database.DataSetObserver; import android.media.MediaPlayer; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.TextView; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ChatMsgViewAdapter extends BaseAdapter { public static interface IMsgViewType { int IMVT_COM_MSG = 0; int IMVT_TO_MSG = 1; } private static final String TAG = ChatMsgViewAdapter.class.getSimpleName(); private List<ChatMsgEntity> coll; private Context ctx; private ChatMsgEntity entity; private LayoutInflater mInflater; private ViewHolder viewHolder = null; private String position1; public ChatMsgViewAdapter(Context context, List<ChatMsgEntity> coll) { ctx = context; this.coll = coll; mInflater = LayoutInflater.from(context); } public int getCount() { return coll.size(); } public Object getItem(int position) { return coll.get(position); } public long getItemId(int position) { return position; } public int getItemViewType(int position) { // TODO Auto-generated method stub ChatMsgEntity entity = coll.get(position); if (entity.getMsgType()) { return IMsgViewType.IMVT_COM_MSG; }else{ return IMsgViewType.IMVT_TO_MSG; } } public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } public View getView(int position, View convertView, ViewGroup parent) { this.position1=position+""; entity = coll.get(position); boolean isComMsg = entity.getMsgType(); if (convertView == null) { if (isComMsg) { convertView = mInflater.inflate(R.layout.chatting_item_msg_text_left, null); }else{ convertView = mInflater.inflate(R.layout.chatting_item_msg_text_right, null); } viewHolder = new ViewHolder(); viewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime); viewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username); viewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent); viewHolder.isComMsg = isComMsg; //添加监听事件 // if(entity.getKind()==2) // { // // viewHolder.tvContent.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) {//设置监听器 // //play(viewHolder.tempTextView.getText().toString()); // // } // }); // } convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tvSendTime.setText(entity.getDate()); viewHolder.tvUserName.setText(entity.getName()); if(entity.getKind()==1) viewHolder.tvContent.setText(entity.getText()); else{ viewHolder.tvContent.setText("语音-点击播放"); viewHolder.tvContent.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {//设置监听器 Log.i("BBB", position1); } }); } return convertView; } static class ViewHolder { public TextView tvSendTime; public TextView tvUserName; public TextView tvContent; public TextView tempTextView; public boolean isComMsg = true; } private void play(String url) { try { MediaPlayer mp = new MediaPlayer(); mp.reset(); mp.setDataSource(url); mp.prepare(); mp.start(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
大四安卓学习mars播放器Listview的问题
抱歉麻烦各位了,本人大四狗,目前在看安卓开发,学习mars老师的音乐播放器时遇到了 个问题,就是设置了SimpleAdapter之后仍然无法显示歌名的内容,只显示了个空白的 TEXTVIEW,我研究了无数次依旧没有发现问题在哪,因此来求教各位大神 附上全部代码,没有错误信息,就是显示不出来,每一步调试过确定都有值 代码如下 ``` package com.example.android_mp3; import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import com.download.HttpDownloader; import com.model.Mp3Info; import com.xml.Mp3ListContentHandler; import android.app.ListActivity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends ListActivity { private static final int UPDATE = 1; private static final int ABOUT = 2; private List<Mp3Info> mp3Infos = null; /* * 用户点击menu按钮后调用,可加入自己的按钮控件 */ @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO 自动生成的方法存根 // 组id,物品id,排序,显示内容 menu.add(0, UPDATE, 1, R.string.mp3list_update); menu.addSubMenu(0, ABOUT, 2, R.string.mp3list_about); return super.onCreateOptionsMenu(menu); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(r).start(); // updateListView(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == UPDATE) { } else if (item.getItemId() == ABOUT) { System.out.println("1"); // updateListView(); } return super.onOptionsItemSelected(item); } // public void updateListView() { // new Thread(new Runnable() { // // @Override // public void run() { // // TODO 自动生成的方法存根 // String xml = downloadXML("http://192.168.88.100:8080/mp3/resources.xml"); // System.out.println("XML------>"); // System.out.println(xml); // System.out.println(Thread.currentThread().getName()); // mp3Infos = parse(xml); // Message msg = Message.obtain(); // msg.sendToTarget(); // } // }) .start(); // List<HashMap<String, String>> list = new ArrayList<HashMap<String, // String>>(); // for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) { // Mp3Info mp3Info = (Mp3Info) iterator.next(); // HashMap<String, String> map = new HashMap<String, String>(); // map.put("mp3_name", mp3Info.getMp3Name()); // map.put("mp3_size", mp3Info.getMp3Size()); // list.add(map); // } // SimpleAdapter adapter = new SimpleAdapter(this, list, // R.layout.mp3info_xml, new String[] { "mp3_name", "mp3_size" }, // new int[] { R.id.mp3_name, R.id.mp3_size }); // setListAdapter(adapter); // } private Handler handler = new Handler() { public void handleMessage(Message msg) { // 显示列表 showList(); } }; Runnable r = new Runnable() { public void run() { String xml = downloadXML("http://192.168.88.100:8080/mp3/resources.xml"); System.out.println("XML------>"); System.out.println(xml); // 解析下载的XML文件 mp3Infos = parse(xml); Message msg = handler.obtainMessage(); msg.sendToTarget(); } }; public void showList() { List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) { Mp3Info mp3Info = (Mp3Info) iterator.next(); HashMap<String, String> map = new HashMap<String, String>(); map.put("mp3_name", mp3Info.getMp3Name()); map.put("mp3_size", mp3Info.getMp3Size()); list.add(map); } SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this, list, R.layout.mp3info_xml, new String[] { "mp3Name", "mp3Size" }, new int[] { R.id.mp3_name, R.id.mp3_size }); setListAdapter(simpleAdapter); } private String downloadXML(String urlString) { HttpDownloader httpDownloader = new HttpDownloader(); String result = httpDownloader.download(urlString); return result; } private List<Mp3Info> parse(String xmlStr) { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); List<Mp3Info> infos = new ArrayList<Mp3Info>(); try { XMLReader xmlReader = saxParserFactory.newSAXParser() .getXMLReader(); Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler( infos); xmlReader.setContentHandler(mp3ListContentHandler); xmlReader.parse(new InputSource(new StringReader(xmlStr))); for (Iterator iterator = infos.iterator(); iterator.hasNext();) { Mp3Info mp3Info = (Mp3Info) iterator.next(); System.out.println(mp3Info); } } catch (SAXException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return infos; } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // Mp3Info mp3Info = mp3Infos.get(position); // System.out.println("----->mp3info" + mp3Info); super.onListItemClick(l, v, position, id); } } ``` xml的 ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingBottom="1dip" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="1dip"> <TextView android:id="@+id/mp3_name" android:layout_width="180dip" android:layout_height="30dip" android:textSize="10pt" /> <TextView android:id="@+id/mp3_size" android:layout_width="180dip" android:layout_height="30dip" android:textSize="10pt" /> </LinearLayout> ``` ![图片说明](https://img-ask.csdn.net/upload/201512/11/1449808460_952004.png) 调试的是有值的![图片说明](https://img-ask.csdn.net/upload/201512/11/1449823354_830574.png) 啊啊啊啊啊啊弄了好久啊,谁知道什么问题的帮帮我啊
如何在tab activity中刷新listview?
在一个tab activity中显示一列items。这个listview 在每一行中都有一个按钮。我在 自定义的adapter 类中处理按钮的clickListener事件,这个类继承BaseAdapter类。但是现在我想实现当我点击这个按钮时,item应该从listview 中删除, listview应该刷新一次。 如何实现? public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; final ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); if(convertView==null) { convertView = mInflater.inflate(R.layout.list_item, null); holder = new ViewHolder(); // holder.appSize = (TextView)convertView.findViewById(R.id.app_size); holder.appName = (TextView)convertView.findViewById(R.id.app_name); holder.app_icon = (ImageView)convertView.findViewById(R.id.app_icon); holder.button = (Button)convertView.findViewById(R.id.uninstall); if(kill_OR_uninstall) { holder.button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_DELETE); intent.setData(Uri.parse("package:"+package_names.get(position))); context.startActivity(intent); } }); } else { holder.button.setText("End"); holder.button.setOnClickListener(new OnClickListener() { public void onClick(View v) { am.restartPackage(package_names.get(position)); } }); } convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.appName.setText((String)app_details.get(position).get(APP_NAME)); holder.app_icon.setImageDrawable((Drawable)app_details.get(position).get(APP_ICON)); // holder.appSize.setText(app_details.get(position).get(APP_SIZE)+ " KB"); return convertView; }
recycview中添加底部按钮问题。
我就想在这个recycview中底部添加两个按钮 项目地址链接: https://pan.baidu.com/s/13EzJZ8CrRL6xRiFjUxJXqw 提取码: qjet ![图片说明](https://img-ask.csdn.net/upload/201903/14/1552547394_832120.png) ``` public class CollectFragment extends Fragment { public RecyclerView mCollectRecyclerView;//定义RecyclerView //定义以goodsentity实体类为对象的数据集合 private ArrayList<GoodsEntity> goodsEntityList = new ArrayList<GoodsEntity>(); //自定义recyclerveiw的适配器 private CollectRecycleAdapter mCollectRecyclerAdapter; private static ChangeFragment mChange; public static CollectFragment newInstance(ChangeFragment changeFragment) { mChange = changeFragment; Bundle args = new Bundle(); CollectFragment fragment = new CollectFragment(); fragment.setArguments(args); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //获取fragment的layout View view = inflater.inflate(R.layout.recyclerview, container, false); //对recycleview进行配置 return view; } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initRecyclerView(view); //模拟数据 initData(); } /** * TODO 模拟数据 */ private void initData() { for (int i=0;i<10;i++){ GoodsEntity goodsEntity=new GoodsEntity(); goodsEntity.setGoodsName("模拟数据"+i); goodsEntity.setGoodsPrice("100"+i); goodsEntityList.add(goodsEntity); } } /** * TODO 对recycleview进行配置 */ private void initRecyclerView(View view) { //获取RecyclerView mCollectRecyclerView=view.findViewById(R.id.collect_recyclerView); //创建adapter mCollectRecyclerAdapter = new CollectRecycleAdapter(getActivity(), goodsEntityList); //给RecyclerView设置adapter mCollectRecyclerView.setAdapter(mCollectRecyclerAdapter); //设置layoutManager,可以设置显示效果,是线性布局、grid布局,还是瀑布流布局 //参数是:上下文、列表方向(横向还是纵向)、是否倒叙 mCollectRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); //设置item的分割线 mCollectRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL)); //RecyclerView中没有item的监听事件,需要自己在适配器中写一个监听事件的接口。参数根据自定义 mCollectRecyclerAdapter.setOnItemClickListener(new CollectRecycleAdapter.OnItemClickListener() { @Override public void OnItemClick(View view, GoodsEntity data) { //此处进行监听事件的业务处理 Toast.makeText(getActivity(),"我是item",Toast.LENGTH_SHORT).show(); mChange.changeAttractionsContent(); } }); } } ``` ``` public class CollectRecycleAdapter extends RecyclerView.Adapter<CollectRecycleAdapter.myViewHodler> { private Context context; private ArrayList<GoodsEntity> goodsEntityList; //创建构造函数 public CollectRecycleAdapter(Context context, ArrayList<GoodsEntity> goodsEntityList) { //将传递过来的数据,赋值给本地变量 this.context = context;//上下文 this.goodsEntityList = goodsEntityList;//实体类数据ArrayList } /** * 创建viewhodler,相当于listview中getview中的创建view和viewhodler * * @param parent * @param viewType * @return */ @Override public myViewHodler onCreateViewHolder(ViewGroup parent, int viewType) { //创建自定义布局 View itemView = View.inflate(context, R.layout.item_content, null); return new myViewHodler(itemView); } /** * 绑定数据,数据与view绑定 * * @param holder * @param position */ @Override public void onBindViewHolder(myViewHodler holder, int position) { //根据点击位置绑定数据 GoodsEntity data = goodsEntityList.get(position); // holder.mItemGoodsImg; holder.mItemGoodsName.setText(data.goodsName);//获取实体类中的name字段并设置 holder.mItemGoodsPrice.setText(data.goodsPrice);//获取实体类中的price字段并设置 } /** * 得到总条数 * * @return */ @Override public int getItemCount() { return goodsEntityList.size(); } //自定义viewhodler class myViewHodler extends RecyclerView.ViewHolder { private ImageView mItemGoodsImg; private TextView mItemGoodsName; private TextView mItemGoodsPrice; public myViewHodler(View itemView) { super(itemView); mItemGoodsImg = itemView.findViewById(R.id.tx_news_simple_photos_01); mItemGoodsName = itemView.findViewById(R.id.tx_news_simple_photos_title); mItemGoodsPrice = itemView.findViewById(R.id.tx_news_simple_photos_time); //点击事件放在adapter中使用,也可以写个接口在activity中调用 //方法一:在adapter中设置点击事件 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //可以选择直接在本位置直接写业务处理 //Toast.makeText(context,"点击了xxx",Toast.LENGTH_SHORT).show(); //此处回传点击监听事件 if(onItemClickListener!=null){ onItemClickListener.OnItemClick(v, goodsEntityList.get(getLayoutPosition())); } } }); } } /** * 设置item的监听事件的接口 */ public interface OnItemClickListener { /** * 接口中的点击每一项的实现方法,参数自己定义 * * @param view 点击的item的视图 * @param data 点击的item的数据 */ public void OnItemClick(View view, GoodsEntity data); } //需要外部访问,所以需要设置set方法,方便调用 private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } } ```
Android 蓝牙通信问题
安卓开发萌新。在做一个蓝牙通信的APP,现在打开蓝牙可以搜索到周围一开启蓝牙的设备,点击连接后,也会出现配对的窗口,但软件会出现闪退,不知是何问题。以下是源代码,希望各路大佬可以帮我解决一下这个问题,是否是线程未开启呢。是否是因为我已经设置与单片机通信的UUID的问题。 ``` package com.windfire; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.UUID; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class WindFireDemoActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ /*建立蓝牙适配器,搜索可连接设备,进行配对,*/ public static final int RECV_VIEW = 0; private BluetoothAdapter mBluetoothAdapter;//蓝牙适配器 private ArrayAdapter<String> deviceAdapter;//设备显示列表适配器 private ConnectThread connectthread; private List<String> listDevices; private ListView text;//显示需要配对设备 private Button parameterinput;//参数录入 private Button teststart;//开始测试 private Button search;//寻找设备按钮 private Button send;//发送按钮 private TextView datatest; private boolean sendflag = false; private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//蓝牙串口服务 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(android.R.style.Theme_Black_NoTitleBar); setContentView(R.layout.main); initview();//实例化 initBroadcast();//初始化广播 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();//获取本地蓝牙适配器,初始化蓝牙 //是否支持蓝牙功能 if(mBluetoothAdapter == null) { Toast.makeText(WindFireDemoActivity.this, "所持设备不支持蓝牙", Toast.LENGTH_SHORT).show(); } } /************************定义广播接收,查找设备,检查配对信息,添加到listDevices中*************************/ private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction();//服务发现远程设备时 String str = ""; if(BluetoothDevice.ACTION_FOUND.equals(action))//每扫描到一个设备,系统都会发送此广播 { //从Intent中获取device信息 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);//获取搜索到的设备信息 str = device.getName()+ ":" + device.getAddress() + "\n"; //当发现的新设备不存在于设备配对列表中时,将设备的名字和地址添加到ArrayAdapter中 if(listDevices.indexOf(str) == -1)//防止重复添加 { listDevices.add(str);//添加搜索到的设备信息 deviceAdapter.notifyDataSetChanged(); } } else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { Toast.makeText(WindFireDemoActivity.this, "Discovery finished", Toast.LENGTH_SHORT).show(); } } }; /**************************************UI实例化*************************************************/ public void initview() { parameterinput =(Button)findViewById(R.id.input); teststart =(Button)findViewById(R.id.start); search =(Button)findViewById(R.id.button); send =(Button)findViewById(R.id.send); text = (ListView)findViewById(R.id.listView1); datatest = (TextView)findViewById(R.id.datatest); parameterinput.setOnClickListener(this); teststart.setOnClickListener(this); search.setOnClickListener(this); send.setOnClickListener(this); listDevices = new ArrayList<String>(); deviceAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listDevices);//列表显示listDevices的设备名称及mac text.setAdapter(deviceAdapter); text.setOnItemClickListener( new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> adapterview, View view, int position,long id) { // TODO Auto-generated method stub //绑定所选择的蓝牙MAC地址设备 String str = deviceAdapter.getItem(position); if(null == str) { Toast.makeText(getApplicationContext(), "未选中设备", Toast.LENGTH_SHORT).show(); } String mac = str.substring(str.indexOf(":")+1).trim(); BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(mac);//以mac去创建一个device connectthread = new ConnectThread(device); connectthread.start(); Toast.makeText(getApplicationContext(), "连接到所选设备", Toast.LENGTH_SHORT).show(); } }); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.input: Intent intent1 = new Intent(WindFireDemoActivity.this,parametershow.class); startActivity(intent1); break; case R.id.start: Intent intent2 = new Intent(WindFireDemoActivity.this,datashow.class); startActivity(intent2); break; case R.id.button: if(!mBluetoothAdapter.isEnabled()) { Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(enabler);//开启蓝牙 if (mBluetoothAdapter.isEnabled())//设置可见 { if (mBluetoothAdapter.getScanMode()!=BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200); startActivity(discoverableIntent); } } } if (mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); Toast.makeText(getApplicationContext(), "Exit Discovery", Toast.LENGTH_SHORT).show(); } else//搜索未开始 { mBluetoothAdapter.startDiscovery();//开始搜索 Toast.makeText(getApplicationContext(), "Start Discovery", Toast.LENGTH_SHORT).show(); } break; case R.id.send: if(connectthread != null)//连接建立完成,准备发送指令开始通信 { try { sendflag = true; String str = "0x33"; connectthread.write(getHexBytes(str)); datatest.setText("send success"); } catch(Exception e) { e.printStackTrace(); } } else { Toast.makeText(WindFireDemoActivity.this, "未连接蓝牙设备", Toast.LENGTH_SHORT).show(); } break; } } /**************************************Broadcast初始化*************************************************/ public void initBroadcast(){ IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mReceiver,filter); } /**************************************连接线程*************************************************/ public class ConnectThread extends Thread { private BluetoothSocket btSocket; private InputStream in; private OutputStream out; //private BluetoothDevice btDev; public ConnectThread (BluetoothDevice device) { try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); } catch(IOException e) { e.printStackTrace(); } } public void run() { //发现服务会减慢连接建立速度,因此关闭掉 if(mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); }//退出搜索 try { //请求连接,该操作会阻塞线程 btSocket.connect(); Toast.makeText(WindFireDemoActivity.this, "连接建立", Toast.LENGTH_SHORT).show(); in = btSocket.getInputStream(); out = btSocket.getOutputStream(); if(sendflag) { new Thread(new Runnable(){ @Override public void run(){ byte[] buffer = new byte[1024]; int bytes; try{ while((bytes = in.read(buffer)) != -1) { String str = new String(buffer,"UTF-8"); str = str.substring(0, bytes); if(str.endsWith(" ")) { datatest.append(str); continue; } Bundle bundle = new Bundle(); Message message = new Message(); bundle.putString("recv", datatest.toString()); message.what = RECV_VIEW; message.setData(bundle); handler.sendMessage(message); } } catch(IOException e) { e.printStackTrace(); } } }).start(); } } catch(IOException e){ try{ btSocket.close(); } catch(IOException e1){ e1.printStackTrace(); } e.printStackTrace(); } } public void write(byte[] bytes) { try { out.write(bytes); } catch(IOException e) { e.printStackTrace(); } } public void cancel() { try { btSocket.close(); } catch (IOException e) { } } } /******************************************Handler处理message*************************************/ private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { Bundle bundle = null; switch(msg.what) { case RECV_VIEW: bundle = msg.getData(); String recv = bundle.getString("recv"); datatest.append(recv+"\n"); break; default: Toast.makeText(getApplicationContext(), "接受信息失败", Toast.LENGTH_SHORT).show(); /*case NOTICE_VIEW: bundle = msg.getData(); String notice = bundle.getString("notice"); datatest.append(notice);*/ break; } } }; public byte[] getHexBytes(String message) { int len = message.length() / 2; char[] chars = message.toCharArray(); String[] hexStr = new String[len]; byte[] bytes = new byte[len]; for (int i = 0, j = 0; j < len; i += 2, j++) { hexStr[j] = "" + chars[i] + chars[i + 1]; bytes[j] = (byte) Integer.parseInt(hexStr[j], 16); } return bytes; } @Override protected void onDestroy() { unregisterReceiver(mReceiver); super.onDestroy(); } } ``` 希望尽快解答
textpaint 与TextView 实现自动换行的问题
看No2部分, ListView的各个item都没显示全,换行的地方也不对,请问这里应该怎么改呢? ``` package com.zhi.www.ui; import android.app.Activity; import android.graphics.Paint; import android.os.Bundle; import android.text.TextPaint; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.zhi.www.autolinefeed.R; import java.util.Random; //自动换行。在ListView中的每一行TextView中加入字符串并判断长度实现自动换行。考察窗口管理器,适配器,TextView和TextPaint public class MainActivity extends Activity { private String string[] = { "美丽新世界", "这就是爱", "super star", "anyway", "开始懂了" }; float text_size = 25.0f; private int windowWidth; private ListView listview; private MyAdapter adapter; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.listview); init(); button = (Button) findViewById(R.id.btn_refresh); button.setOnClickListener(new View.OnClickListener() {//刷新按钮 @Override public void onClick(View arg0) { adapter.notifyDataSetChanged(); } }); } private void init() { //No.1 //开始写代码。要求实现获取屏幕宽度。 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); windowWidth = dm.widthPixels; //end_code adapter = new MyAdapter(); listview.setAdapter(adapter); } class MyAdapter extends BaseAdapter { @Override public int getCount() {//设置显示10行数据 return 10; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout linearlayout = (LinearLayout) View.inflate(getApplicationContext(), R.layout.listview_item, null); Random random = new Random(); int length = 0; for (int i = 0; i < 10; i++) { TextView textview = new TextView(MainActivity.this); TextPaint textpaint; //No.2 //开始写代码。要求实现获取任意的string添加到textview中,每个字符串以“~”分隔,并获取textview的长度。 textpaint = new TextPaint(); textpaint.setTextSize(text_size); textpaint.setTextAlign(Paint.Align.LEFT); int index = random.nextInt(4); String tv = textview.getText().toString() + string[index] + "~"; textview.setText(tv); length = (int)textpaint.measureText(tv); //end_code if(length > (windowWidth-100)){ break; } linearlayout.addView(textview); } return linearlayout; } } } ```
android 类似微信朋友圈点赞,评论功能怎么实现?
@Override public int getCount() { return 5; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public int getItemViewType(int position) { // TODO Auto-generated method stub switch (position) { case 0: return TYPE_1; case 1: return TYPE_2; case 2: return TYPE_3; default: return 0; } } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 3; } @Override public View getView(int position, View convertView, ViewGroup parent) { holder1 = null; holder2 = null; holder3 = null; int type = getItemViewType(position); if (convertView == null) { mInflater = LayoutInflater.from(mContext); switch (type) { case TYPE_1: convertView = mInflater.inflate(R.layout.lv_find_item, null); holder1 = new Holder1(); holder1.gridView = (GridView) convertView .findViewById(R.id.gridView_find); holder1.btn_show_feed = (ImageView) convertView .findViewById(R.id.btn_show_feed); holder1.tv_share_names = (TextView) convertView .findViewById(R.id.tv_share_names); holder1.tv_share = (TextView) convertView .findViewById(R.id.tv_share); holder1.tv_add_friend = (TextView) convertView .findViewById(R.id.tv_add_friend); convertView.setTag(holder1); break; case TYPE_2: convertView = mInflater.inflate(R.layout.lv_find_item2, null); holder2 = new Holder2(); holder2.btn_show_feed2 = (ImageView) convertView .findViewById(R.id.btn_show_feed2); holder2.tv_share_names2 = (TextView) convertView .findViewById(R.id.tv_share_names2); holder2.tv_share2 = (TextView) convertView .findViewById(R.id.tv_share2); holder2.tv_add_friend2 = (TextView) convertView .findViewById(R.id.tv_add_friend2); convertView.setTag(holder2); break; case TYPE_3: convertView = mInflater.inflate(R.layout.lv_find_item3, null); holder3 = new Holder3(); holder3.gridView3 = (GridView) convertView .findViewById(R.id.gridView3); holder3.btn_show_feed3 = (ImageView) convertView .findViewById(R.id.btn_show_feed3); holder3.tv_share_names3 = (TextView) convertView .findViewById(R.id.tv_share_names3); holder3.tv_share3 = (TextView) convertView .findViewById(R.id.tv_share3); holder3.tv_add_friend3 = (TextView) convertView .findViewById(R.id.tv_add_friend3); holder3.tv_crowdfunding_record3 = (TextView) convertView .findViewById(R.id.tv_crowdfunding_record3); convertView.setTag(holder3); break; default: break; } } else { switch (type) { case TYPE_1: holder1 = (Holder1) convertView.getTag(); break; case TYPE_2: holder2 = (Holder2) convertView.getTag(); break; case TYPE_3: holder3 = (Holder3) convertView.getTag(); break; } } // 设置资源 switch (type) { case TYPE_1: holder1.gridView.setAdapter(new HomeBuyGridAdapter(mContext, images_buy)); holder1.btn_show_feed.setOnClickListener(new PopClicListener(type)); holder1.tv_share.setOnClickListener(new MyShareListener()); holder1.tv_add_friend.setOnClickListener(new MyAddListener()); break; case TYPE_2: holder2.btn_show_feed2 .setOnClickListener(new PopClicListener(type)); holder2.tv_share2.setOnClickListener(new MyShareListener()); holder2.tv_add_friend2.setOnClickListener(new MyAddListener()); break; case TYPE_3: holder3.gridView3.setAdapter(new HomeBuyGridAdapter(mContext, images_buy)); holder3.btn_show_feed3 .setOnClickListener(new PopClicListener(type)); holder3.tv_share3.setOnClickListener(new MyShareListener()); holder3.tv_add_friend3.setOnClickListener(new MyAddListener()); holder3.tv_crowdfunding_record3 .setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub getUpPop(); popCrowdfunding.showAtLocation(v, Gravity.CENTER, 0, 0); } }); break; } return convertView; } class Holder1 { GridView gridView; ImageView btn_show_feed; TextView tv_add_friend; TextView tv_share; TextView tv_share_names; TextView tv_comment_name; TextView tv_comment_content; LinearLayout ll_comment; LinearLayout ll_reply; } class Holder2 { ImageView btn_show_feed2; TextView tv_add_friend2; TextView tv_share2; TextView tv_share_names2; TextView tv_comment_name2; TextView tv_comment_content2; LinearLayout ll_comment2; LinearLayout ll_reply2; } class Holder3 { GridView gridView3; ImageView btn_show_feed3; TextView tv_add_friend3; TextView tv_share3; TextView tv_crowdfunding_record3; TextView tv_share_names3; TextView tv_comment_name3; TextView tv_comment_content3; LinearLayout ll_comment3; LinearLayout ll_reply3; } ``` ``` 加载三种不同布局是这样写的吧?有更好的方式吗? 我现在做的一个类似的功能,listview里面加载了三种不同的布局,每种布局都有点赞,评论功能。都是点击按钮弹出一个popupwindow,里面有点赞,评论,按钮。 怎么在点赞的时候能让昵称显示在listview中呢?且显示在对应的listview的item中(都是假数据)。
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片...
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问