如何在从另一个活动获取result_ok后标记列表视图中的复选框

时间:2013-10-19 02:51:47

标签: android listview onactivityresult

我正在尝试使用listview实现一个检查清单。我的列表视图包含一个字符串和旁边的复选框。现在,arraylist共有15个项目。当我点击列表项时,onclicklistener会为结果启动camera activity。如果拍摄照片后一切都成功,则返回到列表中,其中包含点击行{和RESULT_OK的ID。我现在一切正常,除了标记照片已成功拍摄的复选框。

我假设代码需要放在onActivityResult方法中。我真的很茫然。

这是我到目前为止所拥有的。

这是我的自定义数据适配器,onListItemClickonActivityResult的开头。

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()

3 个答案:

答案 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中使用Viewv进行初始化。这将使您了解该特定位置。

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项目也设置为已选中。