应用程序从列表项textview传递错误的文本

时间:2016-01-09 22:28:52

标签: android listview listviewitem

我的应用是传递从列表项中的TextView获取的文本。我知道这个文本视图中的文本是正确的,因为我可以看到它没问题。从TextView获取的文本是MySql数据库中的照片pid。
我的onItemClick代码:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if (((ImageView) findViewById(R.id.reviewImageView)).getBackground() != null) {
            String pid = ((TextView) findViewById(R.id.reviewListPid)).getText().toString();
            Intent i = new Intent(getApplicationContext(), photoActivity.class);
            i.putExtra("pid", pid);
            i.putExtra("database", database_name);
            startActivity(i);
        }
    }
});

我确信每个列表项中的文本都是正确的,我可以看到传递给下一个活动的文本是错误的,因为我可以在日志中看到变量值,这是错误的。

1 个答案:

答案 0 :(得分:1)

两件事:

  1. 这不会解决您的问题,但不是在您的意图初始化中使用getApplicationContext()而是使用<YourActivityName>.this

  2. 你获得String的方式有点不寻常,而且没必要。最有可能的是,您正在使用某种包含&#34; pid&#34;的数组为您的listview加载适配器,对吗?因此,只需从onItemClickListener回调中获取该数组中的值。

  3. 看起来像这样:

    String[] items = {"..."};
    ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
    listView.setAdapter(itemsAdapter);
    
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (((ImageView) findViewById(R.id.reviewImageView)).getBackground() != null) {
                String pid = items[position];
                Intent i = new Intent(MyActivity.this, photoActivity.class);
                i.putExtra("pid", pid);
                i.putExtra("database", database_name);
                startActivity(i);
            }
        }
    });