Android ListView的每个item中添加不同数量的button,点击事件怎么处理?

如图,listview的每行是ABCD的选项,如果是单选就是ABCD,只能选中一个,如果是多选题,选项数量为4-7个,需要能选中多个,请教各位大神这个点击事件怎么处理?图片效果有误 图片说明

2个回答

图片看不到呀,点击事件在Adapter中处理呀,你应该能判断是单选是多选吧,if(单选){处理单选按钮的事件}else{处理多选按钮的事件}

ziyejinwei1994
ziyejinwei1994 回复yuyaoxin127: 试试楼下说的多重item吧
2 年多之前 回复
yuyaoxin127
yuyaoxin127 另外更麻烦的是选择完之后,提交答案后自动批改,如果答案是错的(正确答案AB,提交的答案AC),那就把错的C选项变红色,正确的显示绿色。
2 年多之前 回复
yuyaoxin127
yuyaoxin127 现在关键是adapter中按钮点击事件处理有问题,button是通过动态添加数组资源,设置id和 findviewid及点击事件处理时会出错。
2 年多之前 回复

在adapter中判断一下item的类型,getItemViewType,然后做相应地点击事件处理

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android listview 为每个item上的按钮添加点击事件及处理问题
大侠们 小弟初学android 有这样一个需求 我的一个listview的每一行(item)上都有一个button 需要为该button注册点击事件(已为该activity自定义adapter) 那么如何注册呢 现在我只能在自定义的adapter的getView()方法中为每个item注册点击事件了 可这只是在构造view的过程中注册 此时注册事件 视图没有构造完成 有些属性没法调用 比如 我要求在点击item上的button后产生一dialog(菜单)选择菜单后 刷新activity的view 大侠们 怎么实现 我梦想中最好的想法是要能像web那样在视图渲染完成后在activity中绑定事件那该多好啊 不能能不能实现
ListView的Item中有多个Button,上下滚屏后Button原有状态丢失
ListView的每个Item下都有2个Button(A和B),需求是点击ButtonA,然后ButtonA隐藏。 可是在上下滚屏操作中,发现屏幕下方最新出现的某个Item上的ButtonA也被隐藏了。 如果我分别把同屏的2个Item下ButtonA都隐藏,那么向下滚屏后,又会在某处新出现2个ButtonA被隐藏的Item. 怎么让Item记住他的Button的状态呢?
有个关于android listview的问题 菜鸟一枚求助
一个button 一个editext 一个listview 点击button后取得editext的值 然后把赋值到listview 每点击一次button创建一个listview的item然后item的数据就是editext取得的值
android listview中控件的相互作用
listview中每一项item中,用button控制改变textview的值,为什么每次点击都只改变最后一个textview的值?。每个button的点击事件都触发了,好像适配器每次都找了最后一个textview,求帮助!。。。。。。。。。。。。。。。。
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会被监听
Fragment中listview的相关问题
在程序中有两个tab。每个tab都有它各自的fragment。在其中的一个tab上我需要放置一个列表视图,目的是从存储数组中接收数据,然后再作为列表显示。 public class Frag3 extends Fragment{ ListView lv1; ProgressDialog ShowProgress; public ArrayList<Post> PostList = new ArrayList<Post>(); TextView tv1; Button button1; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } View view = inflater.inflate(R.layout.tab3, container, false); //View tv = view.findViewById(R.id.textView1); View listView = view.findViewById(R.id.listView1); String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; ArrayAdapter<String> files = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, values); lv1.setAdapter(files); return view; } } 我根据不同的web参考文献中试过了各种方法,但是都不对。在这段代码后还要添加什么呢?大家能给我引荐一个正确的方法吗?
给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; } } } 可是这段代码实现不了,请问如何获取数据呢?
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的点击冲突问题
刚才写了一段代码 想通过点击listview上每一项的imageview删除数据库中对应的这一条数据, 但运行时每次都必须点击两下imageview才能删除这一项,之前想过在listview的适配器中来做这个 操作,但是看过的代码好像都没有这么做过并且这样做的话没法更新数据,现在想问问 有没有什么好的方法可以解决这个问题 。对了,设置focusable和clickable属性也没法处理。设置成imagebutton的话 , 由于listview的每一项是通过反射来获取到的 给imagebutton设置onclick属性的话 ,数据就没法传递了,毕竟还是要删除数据库中的数据 ```package com.personal.fyd.blacknumber; import android.content.Context; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * Created by asus on 2016/10/19. */ public class MyAdapter extends BaseAdapter { private List<NumberBean> list; private Context context; public MyAdapter(List<NumberBean> list, Context context) { this.list = list; this.context = context; // for (NumberBean bean:list // ) { // Log.i(context+"",bean.getNumber()+" "+bean.getMode()); // } } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; NumberBean bean; if (convertView == null) { convertView = View.inflate(context, R.layout.item, null); viewHolder = new ViewHolder(); viewHolder.number_tv = (TextView) convertView.findViewById(R.id.tv_number); viewHolder.mode_tv = (TextView) convertView.findViewById(R.id.tv_mode); viewHolder.delete_iv = (ImageView) convertView.findViewById(R.id.iv_delete); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } bean = list.get(position); viewHolder.number_tv.setText(bean.getNumber()); String mode = bean.getMode(); if ("1".equals(mode)){ viewHolder.mode_tv.setText("电话拦截"); }else if ("2".equals(mode)){ viewHolder.mode_tv.setText("短信拦截"); }else if ("3".equals(mode)){ viewHolder.mode_tv.setText("全部拦截"); } return convertView; } static class ViewHolder { TextView number_tv; TextView mode_tv; ImageView delete_iv; } } ``` package com.personal.fyd.blacknumber; import android.content.Context; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.Toast; import java.util.List; public class MainActivity extends AppCompatActivity { private final Context context = MainActivity.this; private ListView lv; private AlertDialog alertDialog; private NumberDao numberdao; private MyAdapter adapter; private List<NumberBean> list; private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); updateLV(); } private void updateLV() { list = numberdao.findAll(); adapter = new MyAdapter(list,MainActivity.this); lv.setAdapter(adapter); } private void initView() { lv = (ListView) findViewById(R.id.lv); numberdao = new NumberDao(this); iv = (ImageView) findViewById(R.id.iv_delete); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { Toast.makeText(context,"再次点击删除此项",Toast.LENGTH_SHORT).show(); view.findViewById(R.id.iv_delete).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String num = list.get(position).getNumber(); // Toast.makeText(context,num,Toast.LENGTH_SHORT).show(); numberdao.delete(num); numberdao.findAll(); updateLV(); } }); } }); } public void delete(View view){ } public void add(View view){ showDiagle(); } //显示对话框 private void showDiagle(){ AlertDialog.Builder builder = new AlertDialog.Builder(this); View view = View.inflate(this,R.layout.diagle,null); builder.setView(view); final EditText editText = (EditText) view.findViewById(R.id.blacknumber_et); final CheckBox call_cb = (CheckBox) view.findViewById(R.id.call_cb); final CheckBox sms_cb = (CheckBox) view.findViewById(R.id.sms_cb); Button commit = (Button) view.findViewById(R.id.commit_btn); Button cancel = (Button)view.findViewById(R.id.cancel_btn); commit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String number = editText.getText().toString(); //判断是否为空 if (TextUtils.isEmpty(number)){ Toast.makeText(MainActivity.this,"number ",Toast.LENGTH_SHORT).show(); return; } String mode; if (call_cb.isChecked()&&sms_cb.isChecked()){ mode = "3"; }else if (call_cb.isChecked()){ mode = "1"; }else if (sms_cb.isChecked()){ mode = "2"; }else { Toast.makeText(MainActivity.this,"请至少选择一种拦截方式",Toast.LENGTH_SHORT).show(); return; } //操作合法 插入数据 numberdao.insert(number,mode); //插入成功 重新查询 alertDialog.dismiss(); updateLV(); } }); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { alertDialog.dismiss(); } }); alertDialog = builder.create(); alertDialog.show(); } } ``` ```
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(); } } }
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; } } ```
在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 蓝牙通信问题
安卓开发萌新。在做一个蓝牙通信的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(); } } ``` 希望尽快解答
如何在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; }
android适配器问题求大师
比如一个listview,我在每个item中都有一个button,数据是在第一次加载的时候的网络请求中得到的,现在想要起到一个效果:当点击button,使listview刷新,我不是说notifyDataSetChanged();这个方法在数据没有变得情况下不会刷新list,我想要让list重新网络请求以起到刷新列表功能
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)); } });
自学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; } } }; }
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; } } } ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# 二进制截断字符串 c#实现窗体设计器 c#检测是否为微信 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片
立即提问