1

My ListView は、データベースから取得したレシピのリストです。ListView でクリックされた項目のテキストを取得しようとしています。ListView は、データベース呼び出しとカーソルアダプターによって設定されます。選択した項目のテキストを使用して、別のアクティビティで別のデータベース呼び出しを行いたいです。ここにコードチャンクがあります

listView.setClickable(true);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            final String text = ((TextView)v).getText().toString();
            recipeid = myDBAdapter.getRecipeID(text);
            Intent intent = new Intent(ListAllRecipes.this, DisplayRecipe.class);
            intent.putExtra("recipeid", recipeid);
            startActivity(intent);

        }

    });

コードを実行すると、

04-22 14:08:37.022: E/AndroidRuntime(25206): FATAL EXCEPTION: main
04-22 14:08:37.022: E/AndroidRuntime(25206): java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView
04-22 14:08:37.022: E/AndroidRuntime(25206):    at com.example.ketorecipes.ListAllRecipes$1.onItemClick(ListAllRecipes.java:47)

ListView の項目をクリックしたとき。

1 つのチャンクのアクティビティは次のとおりです。

public class ListAllRecipes extends Activity{
private DBAdapter myDBAdapter;
private ListView listView;
private int recipeid;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_all);



    myDBAdapter = new DBAdapter(this);
    myDBAdapter.openToRead();
    Cursor c = myDBAdapter.getValues();

    listView = (ListView)findViewById(R.id.listView1);
    String[] from = new String[] {"_id"};
    int[] to = new int[] {R.id.name_entry};
    SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.list_entry, c, from, to);
    listView.setAdapter(cursorAdapter);



    listView.setClickable(true);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            final String text = ((TextView)v).getText().toString();
            recipeid = myDBAdapter.getRecipeID(text);
            Intent intent = new Intent(ListAllRecipes.this, DisplayRecipe.class);
            intent.putExtra("recipeid", recipeid);
            startActivity(intent);

        }

    });
}

}

4

3 に答える 3

1

positionFieldonItemClickを使用してアイテムを取得することをお勧めしparent.getItemAtPosition(position)ます。これにより、クリックしたアイテムを表すエントリが返されます (適切なタイプにキャストする必要がある場合があります)。これは、必要なものであり、値を手動で取得する必要はありません。 UI 要素から。

于 2013-04-22T19:45:23.783 に答える
0

返されたビュー (v) がテキストビューではないことは確かです。リスト項目はカスタマイズされたビューであるため、ID でビューを見つけてビューを取得する必要があります。

于 2013-04-22T19:34:21.037 に答える