myListActivity 和 myListAdapter 的控件传值问题。

vnking 2014-09-30 10:13:25
myListActivity 继承于 ListActivity
myListAdapter 继承于 BaseAdapter

myListAdapter 收集的数据存入 List<myLatlon> lml, 然后将lml递交个myListAdapter显示,

部分代码如下:


@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;

if(convertView == null)
{
convertView = mInflater.inflate(R.layout.logs_list, null);
holder = new ViewHolder();
holder.date = (TextView) convertView.findViewById(R.id.date);
holder.time = (TextView) convertView.findViewById(R.id.time);
holder.lat = (TextView) convertView.findViewById(R.id.lat);
holder.lon = (TextView) convertView.findViewById(R.id.lon);
holder.select = (CheckBox) convertView.findViewById(R.id.select);

convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
myLatlon ml = lml.get(position);
int d = ml.getDate();
int m = d / 100;
int y = m / 100;
int s = ml.getTime();
int n = s / 100;
int h = n / 100;
holder.date.setText(String.format("%02d/%02d/%02d", y-2000, m%100, d%100));
holder.time.setText(String.format("%02d:%02d:%02d", h, n%100, s%100));
holder.lat.setText(String.format("%.6f", (double)ml.getLat()/1E6));
holder.lon.setText(String.format("%.6f", (double)ml.getLon()/1E6));
holder.select.setOnCheckedChangeListener(new OnCheckedChangeListener(){

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub

}

});
return convertView;
}

private class ViewHolder
{
CheckBox select;
TextView date;
TextView time;
TextView lat;
TextView lon;
}



我的问题是:当CheckBox点中时,如何将其值更新到lml的对应项中?
...全文
132 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vnking 2014-10-11
  • 打赏
  • 举报
回复
我的做法是:将一个id值赋给CheckBox,点击时能检查到id值,然后发消息回去,修改数据表中的选中参数,即可。

	    	holder.select.setOnCheckedChangeListener(new OnCheckedChangeListener(){

				@Override
				public void onCheckedChanged(CompoundButton buttonView,
						boolean isChecked) {
					// TODO Auto-generated method stub
					Message msg = new Message();
					msg.what = 1234;
					msg.arg1 = buttonView.getId();
					msg.arg2 = isChecked?1:0;
					handler.sendMessage(msg);
					// Log.e("DEBUG", "点击:" + buttonView.getId());
				}
	    		
	    	});
关键是这句:


    	holder.select.setId(position);

svenwang 2014-09-30
  • 打赏
  • 举报
回复
引用 3 楼 svenwang 的回复:
在CheckBox上注册一个OnCheckBoxClickListener 监听器,然后在事件函数里修改数据,然后调用adapter的NotifyDatasetChanged函数。
写错了函数名,应该是notifyDataSetChanged
junyuyi 2014-09-30
  • 打赏
  • 举报
回复
可以在adapter构造函数那 加个listener参数 然后再adapter里面声明这接口 在activity里实现这listener 即2L的做法
svenwang 2014-09-30
  • 打赏
  • 举报
回复
在CheckBox上注册一个OnCheckBoxClickListener 监听器,然后在事件函数里修改数据,然后调用adapter的NotifyDatasetChanged函数。
rover11 2014-09-30
  • 打赏
  • 举报
回复
一般做法是 自定义一个Listener 比如 public interface OnCheckBoxClickListener { public void onClick(CompoundButton buttonView, boolean isChecked); } 并在Activity中 实现它, 在new Adapter 的时候传实例进去 在你的39行直接调用这个实例的 onClick(...);
svenwang 2014-09-30
  • 打赏
  • 举报
回复
注册一个点击事件监听器到CheckBox就可以了。

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧