0

我有一个由 sqlite 数据库填充的列表。我想要做的是将单击的行的值 - 这是一个字符串(不是行 ID) - 传递到一个新的活动中。例如,如果我有这个列表......

苹果
香蕉
胡萝卜
...

…然后我单击“香蕉”,我希望将“香蕉”传递给新活动。我可以让它工作,但仅限于列表中的第一项。所有其他列表项也返回相同的值(即“Apples”)。这是我正在使用的代码……</p>

 private AdapterView.OnItemClickListener onListClick=new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent,
                            View view, int position,
                            long id) 
    Intent i=new Intent(MyApp.this, MyActivity.class);

        TextView nameValue = (TextView)findViewById(R.id.ingredientText);
        String content = nameValue.getText().toString(); 

        i.putExtra(ID_EXTRA, String.valueOf(content));

        startActivity(i);

    }
};

同样,无论单击哪一行,此代码都会返回“Apples”的值。也许我在这方面采取了错误的方法,因为我对在 Android 中使用数据库还很陌生。有人可以告诉我为什么上面的代码是错误的以及我如何能够纠正它?提前感谢您的帮助。

4

3 回答 3

2

您总是从同一个字段中获取文本:TextView nameValue = (TextView)findViewById(R.id.ingredientText);您所要做的就是使用parentposition获取所选项目以获取您的contentthen。

于 2012-09-04T20:32:57.257 回答
2

使用该代码,您将在 TextView 中传递文本,除非您更改它(显然),否则该文本是固定的。如果您直接需要所选行的值,为什么不直接从数组中取值呢?

假设你有一个 ArrayList 水果,它会很容易:

i.putExtra(ID_EXTRA, fruits.get(position);
于 2012-09-04T20:33:33.383 回答
2

其他答案都是正确的。但是如果你更喜欢直接从视图中获取值,你需要在传入 onItemClick 的视图上调用 findViewById:

public void onItemClick(AdapterView<?> parent, View view, int position, long id){
    Intent i=new Intent(MyApp.this, MyActivity.class);

    TextView nameValue = (TextView)**view**.findViewById(R.id.ingredientText);

    String content = nameValue.getText().toString(); 
    i.putExtra(ID_EXTRA, String.valueOf(content));
    startActivity(i);
}

在您的原始代码中,您似乎在 Activity 的整个视图树上调用它,这就是为什么您不断获得相同结果的原因。

于 2012-09-04T20:35:59.297 回答