4
    public class MainActivity extends Activity {
    ListView list;
    String[] abc={"1","2","3"};
    MyCustomAdapter adapter;
    Button refresh;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            list=(ListView) findViewById(R.id.list);
             refresh=(Button) findViewById(R.id.refresh);
             adapter=new MyCustomAdapter(MainActivity.this,abc);
            list.setAdapter(adapter);

        }
         private class MyCustomAdapter extends BaseAdapter {
                private final Context context;
                private ArrayList mData = new ArrayList();
                private LayoutInflater mInflater;
                private String[] hashmap;
                ViewHolder holder = null;
                public MyCustomAdapter(Context context,String[] hashMaps) {
                    super();
                    this.context = context;
                    this.hashmap = hashMaps;
                    mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                }
                public int getCount() {

                    return hashmap.length;

                }


                public Object getItem(int position) {
                    return hashmap.length;
                }


                public long getItemId(int position) {

                    return position;
                }

                @Override
                public void notifyDataSetChanged() // Create this function in your adapter class
                {
                    super.notifyDataSetChanged();
                }
                @Override
                public View getView(final int position, View convertView, ViewGroup parent) {
                    System.out.println("getView " + position + " " + convertView);
                   // final ViewHolder holder = null;
                    if (convertView == null) {
                        convertView = mInflater.inflate(R.layout.view1, null);
                        holder = new ViewHolder();
                        holder.textView = (TextView)convertView.findViewById(R.id.text);
                        holder.btn = (Button)convertView.findViewById(R.id.refresh);
                        convertView.setTag(holder);
                    } else {
                        holder = (ViewHolder)convertView.getTag();
                    }
                    holder.textView.setText(hashmap[position]);

                    holder.btn.setOnClickListener(new OnClickListener(){  
                           @Override
                          public void onClick(View v) {
                             RelativeLayout rl = (RelativeLayout)v.getParent();
                            holder.textView = (TextView)rl.getChildAt(position);
                            Log.i("position",String.valueOf(position));
                            holder.textView.setText("10");
                           }
                         });

                    return convertView;

                }

            }

            public static class ViewHolder {
                public TextView textView;
                public Button btn;
            }




    }

View.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   android:id="@+id/real"
    >
    <TextView 
                android:id="@+id/text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:text="Text"
                android:layout_marginTop="15dp"
                android:layout_marginLeft="20dp"
                />
    <Button 
                android:id="@+id/refresh"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/text"
                android:text="button"
                 android:layout_marginLeft="20dp"
                />
    </RelativeLayout>

Here in my ListView,when i click the button the value is not changed inside my adapter view.how to resolve this? the list contains 3 values of each position.so when i click the button in the clicked position,the value is going to be change instead of old value.

GrIsHu
  • 29,068
  • 10
  • 64
  • 102
Rajesh Lawrance
  • 161
  • 3
  • 3
  • 9

5 Answers5

3

try this :

holder.btn.setTag(convertView);

holder.btn.setOnClickListener(new OnClickListener(){  

                       @Override
                      public void onClick(View v) {
                          View tempView = v.getTag();
            TextView tv = (TextView)tempView.findViewById(R.id.text);
            tv.setText("your string");  
                       }
                     });
Rahul Baradia
  • 11,802
  • 17
  • 73
  • 121
Anand
  • 2,875
  • 1
  • 18
  • 16
3

Change getView method code as below.

@Override
        public View getView(final int position, View convertView,ViewGroup parent) {
            View vi = convertView;
            final TextView textView;
            if (convertView == null)
                inflater = (LayoutInflater)    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            vi = inflater.inflate(R.layout.vi, null);

            textView = (TextView) vi.findViewById(R.id.text);
            Button btn = (Button) vi.findViewById(R.id.refresh);
            textView.setText(hashmap[position]);
            btn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.i("position  ", position + "");
                    textView.setText("10");
                }
            });

            return vi;
        }
user1621629
  • 765
  • 7
  • 19
1

You should use notifyDataSetChanged () method to refresh your listview...

Call notifyDataSetChanged() on your Adapter

  refresh.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View p_v) {
                // TODO Auto-generated method stub
                adapter.notifyDataSetChanged();
            }
        });
GrIsHu
  • 29,068
  • 10
  • 64
  • 102
  • i am using holder.its not working in line list.notifyDataSetChanged(); ErrorThe method notifyDataSetChanged() is undefined for the type ListView – Rajesh Lawrance Jan 30 '13 at 06:59
0

call this

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, your_new_value));

For more info try this link

Janmejoy
  • 2,721
  • 1
  • 20
  • 38
0

For updating values listview you can use adapter.notifyDataSetChanged() this will refresh your list adapter. But call this after changing value in your data source.

Akhilesh Mani
  • 3,502
  • 5
  • 28
  • 59