yousafkh
yousafkh

Reputation: 104

Cannot change TextView when clicked, in ListView

This is my onItemClickListener Method

//list item listener
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
         LinearLayout parent = (LinearLayout) view;
         TextView t = (TextView) parent.findViewById(R.id.grocery_item_name);

         t.setText("Something");
}

Edit: This is the Adapter Class

code to call adapter:

adapter = new CustomList(this,R.layout.listitems_improved,Items);

listview.setAdapter(adapter);

    private class CustomList extends ArrayAdapter{

        ArrayList<Item> items;
        Activity myActivity;
        LayoutInflater layoutinflater;
        View myview;

        public ProductsCustomList(Context context, int resource, ArrayList<item> i) {
            super(context, resource, p);
            this.items = i;
            this.myActivity = (Activity) context;
        }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
            //Inflate the custom row layout in the view
            layoutinflater = myActivity.getLayoutInflater();
            myview = layoutinflater.inflate(R.layout.groceryitems_custom_listview, null);

            //instantiate the views in custom row layout
            TextView tv = (TextView) myview.findViewById(R.id.tv);

            tv.setText(items.get(position).getItemName());


            return myview;
        }
}

When I call this line t.setText("Something"); textview doesn't change in the ListView, nothing happens. Why is it not wokring here?

Upvotes: 0

Views: 86

Answers (4)

learner
learner

Reputation: 3110

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
         LinearLayout parent = (LinearLayout) view;
         TextView t = (TextView) parent.getChilldId(i).findViewById(R.id.grocery_item_name);

         t.setText("Something");
}

Upvotes: 0

JoCuTo
JoCuTo

Reputation: 2483

Please try this in your getView() method in your Adapter class:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
            //Inflate the custom row layout in the view
            layoutinflater = myActivity.getLayoutInflater();
            myview = layoutinflater.inflate(R.layout.groceryitems_custom_listview, null);

            //instantiate the views in custom row layout
            TextView tv = (TextView) myview.findViewById(R.id.tv);
            tv.setText(items.get(position).getItemName());


           myview.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                TextView view = (TextView) v.findViewById(R.id.your_text_id);
                view.setText("text_changed");
            }
        });


            return myview;
        }

Upvotes: 1

Jose Angel Maneiro
Jose Angel Maneiro

Reputation: 1316

You also can try to include the listener in adapter:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
        //Inflate the custom row layout in the view
        layoutinflater = myActivity.getLayoutInflater();
        myview = layoutinflater.inflate(R.layout.groceryitems_custom_listview, null);

        //instantiate the views in custom row layout
        TextView tv = (TextView) myview.findViewById(R.id.tv);

        tv.setText(items.get(position).getItemName());


        tv.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View arg0){                 
                    tv.setText("selected");                 
                }               
        });


        return myview;
    }

Upvotes: 0

Jose Angel Maneiro
Jose Angel Maneiro

Reputation: 1316

You can do something like this:

final Adapter yourAdapter = new Adapter(context, items);

listview.setAdapter(yourAdapter);

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){

     //change value for item select
     items.get(i).setItemName("yourText");

     yourAdapter.notifyDataSetChanged();
     //if the this line don't refresh the list, you can recreate adapter:
     //listview.setAdapter(new Adapter(context, items); 

}

Regards.

Upvotes: 1

Related Questions