使用putExtra将值传递给新活动的问题

时间:2012-09-04 20:29:54

标签: android database sqlite

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

苹果
香蕉
胡萝卜
...
等等。

...我点击'香蕉',我希望'香蕉'被传递给新的活动。我可以让它工作,但只适用于列表中的第一项。所有其他列表项也返回相同的值(即'Apples')。这是我正在使用的代码......

 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中的数据库。有人可以告诉为什么上面的代码是错误的,我怎么能纠正它?提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您始终可以从同一字段获取文字:TextView nameValue = (TextView)findViewById(R.id.ingredientText);您必须使用parentposition来获取所选项目以获取content

答案 1 :(得分:2)

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

假设您有一个ArrayList结果,它就像以下一样简单:

i.putExtra(ID_EXTRA, fruits.get(position);

答案 2 :(得分:2)

其他答案都是正确的。但是如果您希望直接从视图中获取值,则需要在传递给onItemClick的View上调用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);
}

在原始代码中,您可以在活动的整个视图树上调用它,这就是为什么您可以获得相同的结果。