How to update the list when I click the button?

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 does not change inside my view.how adapter to solve this? the list contains 3 values โ€‹โ€‹of each item. When I press the button in the pressed position, the value will change instead of the old value.

+4
source share
5 answers

Modify the getView method code as shown 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; } 
+3
source

try the following:

 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"); } }); 
+3
source

call it

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

For more information, try the link.

0
source

You must use the notifyDataSetChanged () method to update the list of views ...

Call notifyDataSetChanged () on your adapter

  refresh.setOnClickListener(new OnClickListener() { @Override public void onClick(View p_v) { // TODO Auto-generated method stub adapter.notifyDataSetChanged(); } }); 
0
source

You can use adapter.notifyDataSetChanged() to update the list of values, this will update your list adapter. But call it by changing the value in the data source.

0
source

All Articles