ListView修改item某个控件属性的问题:在只有一个item时,可以进行修改,但是有两个或以上的item

Android 码拜 5年前 (2016-05-04) 539次浏览
//这里是点击某个item执行下面的方法
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
//Address address = addresses.get(position);
//Address address2 = (Address) listView.getItemAtPosition(position);
Intent intent = new Intent(AddressActivity.this, EditAddressActivity.class);
startActivityForResult(intent, 2);
adapter.notifyDataSetChanged();
}
});
//这里是使用intent回调数据,并让数据显示到item上。实现修改item数据的效果。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1&&resultCode == 2){
UserName = data.getStringExtra(“userName”);
cellNum = data.getStringExtra(“cellPhoneNum”);
detailAddress = data.getStringExtra(“detailAddress”);
initAddress(UserName, cellNum, detailAddress);
}
else if(requestCode ==2&&resultCode == 3){
UserName = data.getStringExtra(“userName”);
cellNum = data.getStringExtra(“cellNum”);
detailAddress = data.getStringExtra(“detailAddress”);
editAddress(UserName, cellNum, detailAddress);
}
}
private void editAddress(String username, String cellnumber, String detailaddress){
TextView tv_userName = (TextView) findViewById(R.id.textView1_userName);
TextView tv_cellNum = (TextView) findViewById(R.id.textView2d_cellP);
TextView tv_detailAddress = (TextView) findViewById(R.id.Add_detail);
tv_userName.setText(username);
tv_cellNum.setText(cellnumber);
tv_detailAddress.setText(detailaddress);
//adapter.clear();
}
//这里是第二个activity回传数据的方法
public void onClick(View arg0) {
Intent intent = new Intent();
String userName = et_1.getText().toString();
String cellNum = et_2.getText().toString();
String detailAddress = et_3.getText().toString();
intent.putExtra(“userName”, userName);
intent.putExtra(“cellNum”, cellNum);
intent.putExtra(“detailAddress”, detailAddress);
setResult(3, intent);
finish();
}
});
小弟不才,自学初入android,有许多不懂的地方。每天看论坛大家的讲解慢慢积累知识,这个问题本人实在不知道怎么回事。请高手帮帮忙。
大致问题是本人只有一个item的时候,本人可以对其进行编辑。但是有两个或以上item时就不能编辑item的值。
解决方案

10

你点击时,在onactivityResult打印一下你能否获取到了值

20

貌似有点头绪了,你可以先检查下resultCode的值是不是3;
还有这几个(TextView) findViewById(R.id.textView1_userName);
TextView tv_cellNum = (TextView) findViewById(R.id.textView2d_cellP);
TextView tv_detailAddress = (TextView) findViewById(R.id.Add_detail);
这几个findView可能没找到正确的位置,多个item的话就有多个叫textView1_userName的东西了,你这样通过editAddress方法找的话,应该是找不到指定的item的
本人这里一般的onItemClick做法是这样的:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
你的view=view.findViewById(R.id.你的id)
……
要做的逻辑,点击事件什么的,可以在这里startActivityForResult什么的
……
}
});
假如你想通过activityResult的方式来做,本人这里是通过更改adapter的数据源,然后notifyDataSetChanged();来实现的。例如,本人要更改第二个数据,假如原来第二个item的数据是1,那本人就在OnActivityResult中将它的值改为本人想要的值,重新赋给adapter,并调用adapter.notifyDataSetChanged();

10

6楼正解,给你说个简单的做法,具体做法如下:
onItemClick的时候记录下点击位置的对象;在onActivityResult中更新记录的对象,然后调用adapter.notifyDataSetChanged();
设置全局变量

//全局变量
Address address; 
//onItemClick中记录点击的对象
address = adapter.getItem(arg2);
//onActivityResult更新记录的对象,并更新界面
address.userName = username;
......
adapter.notifyDataSetChanged()

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明ListView修改item某个控件属性的问题:在只有一个item时,可以进行修改,但是有两个或以上的item
喜欢 (0)
[1034331897@qq.com]
分享 (0)