Search code examples
androidlistviewlistviewitem

App is passing wrong text from list items textview


My app is passing text taken from TextView in list item. I know that text in this text views is right cause I can see that it's ok. Text taken from TextView is pid of photo in MySql database.
My onItemClick code :

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);
        }
    }
});

I'm sure that text in every list item is right and I can see that text passed to next activity is wrong, cause I can see variable value in log and it's wrong.


Solution

  • Two things:

    1. This won't fix your issue but instead of using getApplicationContext() in your Intent intialization use <YourActivityName>.this instead.

    2. The way you are getting your String is a little unusual, and unnecessary. Most likely, you are loading your adapter for your listview with some sort of array that contains the "pid", correct? So then just get the value from that array in your onItemClickListener callback.

    It would look like this:

    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);
            }
        }
    });