Android ListView编辑异常:点击任意项仅修改第一项的求助
问题原因
- 编辑页面(
d_Game_message_edit)保存备忘录时,未将备忘录的位置编号(requestCode)回传给主页面。主页面接收结果时因获取不到正确位置,只能使用默认值0,导致每次都修改数组第一项。 - 编辑页面中截取编号的逻辑(
s.substring(0,2))存在隐患,当备忘录编号超过9(如10.)时会截取错误内容。
修复步骤
1. 修改编辑页面(d_Game_message_edit)
需要先接收主页面传来的requestCode并保存,再在保存时回传该值,同时优化编号截取逻辑:
public class d_Game_message_edit extends AppCompatActivity { TextView txv; EditText edt; // 新增变量保存备忘录位置 private int memoPosition; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dgame_message_edit); Intent it = getIntent(); String s = it.getStringExtra("memo"); // 接收主页面传来的位置编号 memoPosition = it.getIntExtra("requestCode", 0); txv = (TextView)findViewById(R.id.textView); edt = (EditText)findViewById(R.id.editText); // 优化编号截取:通过"."的位置分割编号与内容 int dotIndex = s.indexOf("."); if(dotIndex != -1){ txv.setText(s.substring(0, dotIndex + 1)); // 若存在内容,去除首尾空格后设置到输入框 if(s.length() > dotIndex + 1){ edt.setText(s.substring(dotIndex + 1).trim()); } } } public void onCancel(View v) { setResult(RESULT_CANCELED); finish(); } public void onSave(View v) { Intent it2 = new Intent(); // 回传备忘录位置编号 it2.putExtra("requestCode", memoPosition); // 拼接编号与内容,去除多余空格 it2.putExtra("memo", txv.getText().toString().trim() + " " + edt.getText().toString().trim()); setResult(RESULT_OK, it2); finish(); } }
2. 主页面逻辑确认
主页面传递位置编号、接收结果的逻辑已正确,无需修改。修复后点击任意备忘录项编辑,保存后会对应修改数组中对应位置的内容。
额外优化建议
- 用
ArrayList<String>替代固定长度的String[],可灵活添加/删除备忘录项,避免数组长度限制。 - 将备忘录数据持久化(如保存到SharedPreferences或本地文件),防止APP重启后数据丢失。
内容的提问来源于stack exchange,提问作者Xiayan
相关产品推荐
相关产品推荐

