2

リストビューでチェックオフリストを実現しようとしています。私のリストビューには、文字列とその横にあるチェックボックスが含まれています。現在、arraylist には合計 15 個のアイテムがあります。リスト項目をクリックすると、結果onclicklistenerが開始されます。camera activity写真の撮影に成功すると、クリックされた行の ID とRESULT_OK. 写真が正常に撮影されたことを示すチェックボックスを除いて、現在すべてが機能しています。

onActivityResultコードをメソッドに配置する必要があると想定しています。私は本当にここで途方に暮れています。

これが私がこれまでに持っているものです。

これは私のカスタム arrayadapter であり、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 を取得するのに苦労しています。

エクリプスは言いType mismatch cannot covert from Uri to intます。

次に、IDを取得したら、チェックボックスをに設定するにはどうすればよいですかsetChecked()

4

3 に答える 3

0

あなたがしていることは間違っています。これを行う方法は次のとおりです。アクティビティでは、このようなものCameraClassを追加する必要がありますid

Intent intent = new Intent();
    Bundle bundle = new Bundle();
    bundle.putInt("PhotoTaken",id);
    intent.putExtras(bundle);
    setResult(RESULT_OK,intent);
    finish();

OKをマークするにCheckBoxは、その特定の行のビューにアクセスする必要があります。Viewこれは、クラスの開始時にグローバルを宣言することで実行できます。

View view_at_position=null;

次に、onListItemClickwithを初期化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);
于 2013-10-19T03:20:03.580 に答える
0

ID の代わりに Intent データ内のアイテムの位置を渡します。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 が呼び出され、項目がチェックされていることを確認し、リストビュー項目もチェック済みに設定します。

于 2013-10-19T06:20:11.850 に答える
0

このコードを使用してみてください:

id = Integer.parseInt(data.getData().toString());
于 2013-10-19T03:09:12.887 に答える