我正在尝试使用listview实现一个检查清单。我的列表视图包含一个字符串和旁边的复选框。现在,arraylist共有15个项目。当我点击列表项时,onclicklistener
会为结果启动camera activity
。如果拍摄照片后一切都成功,则返回到列表中,其中包含点击行{和RESULT_OK
的ID。我现在一切正常,除了标记照片已成功拍摄的复选框。
我假设代码需要放在onActivityResult
方法中。我真的很茫然。
这是我到目前为止所拥有的。
这是我的自定义数据适配器,onListItemClick
和onActivityResult
的开头。
private class GrassAdapter extends ArrayAdapter<Grass> {
public GrassAdapter(ArrayList<Grass> grasss) {
super(getActivity(), 0, grasss);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// If we weren't given a view, inflate one
if (convertView == null) {
convertView = getActivity().getLayoutInflater()
.inflate(R.layout.fragment_grasslist, null);
}
// Configure the view for this Crime
Grass c = getItem(position);
TextView titleTextView =
(TextView)convertView.findViewById(R.id.photo_titleTextView);
titleTextView.setText(c.getName());
CheckBox solvedCheckBox =
(CheckBox)convertView.findViewById(R.id.photo_solvedCheckBox);
solvedCheckBox.setChecked(c.isChecked());
return convertView;
}
}
public void onListItemClick(ListView l, View v, int position, long id) {
Grass selectedValue = (Grass) getListAdapter().getItem(position);
//Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show();
// Start CameraActivity
Intent i = new Intent(getActivity(), CameraActivity.class);
i.putExtra("ID", id);
i.putExtra("FILE_NAME", selectedValue.getName());
startActivityForResult(i, POSITION_CHECKED);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == POSITION_CHECKED) {
if (resultCode == Activity.RESULT_OK) {
int id = data.getData();
.setChecked(true);
}
}
}
现在我很难从意图数据中获取id。
Eclipse说Type mismatch cannot covert from Uri to int
。
然后,当我收到ID后,如何将复选框设置为setChecked()
。
答案 0 :(得分:0)
尝试使用此代码:
id = Integer.parseInt(data.getData().toString());
答案 1 :(得分:0)
你在做什么是错的。这是怎么做的。
在CameraClass
活动中,您必须像这样添加id
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt("PhotoTaken",id);
intent.putExtras(bundle);
setResult(RESULT_OK,intent);
finish();
要标记CheckBox
确定,您必须访问该特定行的视图。这可以通过在课程开始时声明全局View
来完成。
View view_at_position=null;
然后在onListItemClick
中使用View
对v
进行初始化。这将使您了解该特定位置。
view_at_position=v;
然后在onActivityResult
中,您需要从Intent data
Bundle bundle = data.getExtras();
int id = bundle.getInt("PhotoTaken");
CheckBox cb = (CheckBox)view_at_position.findViewById(R.id.photo_solvedCheckBox);
cb.setChecked(true);
答案 2 :(得分:0)
传递Intent数据中项目的位置而不是id。他们需要将CameraActivity保存为int并将其返回到其意图中:
Intent i = new Intent();
i.putExtra("RETURN_POSITION", mSavedInt;
然后在你的onActivityResult()中你得到这样的位置:
int position = data.getIntExtra("RETURN_POSITION");
然后,您可以通过在Grass集合中访问它来设置复选框:
mGrass.get(position).setIsChecked(true);
mGrassAdapter.notifyDataSetChanged();
您的getView将被调用,看到项目已被选中并将listview项目也设置为已选中。