zoukankan      html  css  js  c++  java
  • Android ListView动态刷新某项Item

    使用ViewHolder来刷新某项数据,而不用每次都全部刷新数据。

    继承BaseAdapter,新建ViewHolder类。

    public class TestListAdapter extends BaseAdapter {
        private Context mContext;
    
        private List<String> strList;
    
        public TestListAdapter(Context context, List<String> list) {
            super();
            this.mContext = context;
            this.strList = list;
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return strList.size();
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder holder = null;
            if (null == convertView) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.line, null);
    
                holder = new ViewHolder();
                holder.iDText = (TextView) convertView.findViewById(R.id.textView_id);
                holder.strText = (TextView) convertView.findViewById(R.id.textView_str);
    
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
    
            holder.iDText.setText(position + "");
            String str = strList.get(position);
            holder.strText.setText(str);
    
            return convertView;
        }
    
        private static class ViewHolder {
            private TextView iDText;
    
            private TextView strText;
        }
    
        public void updataView(int posi, ListView listView) {
            int visibleFirstPosi = listView.getFirstVisiblePosition();
            int visibleLastPosi = listView.getLastVisiblePosition();
            if (posi >= visibleFirstPosi && posi <= visibleLastPosi) {
                View view = listView.getChildAt(posi - visibleFirstPosi);
                ViewHolder holder = (ViewHolder) view.getTag();
    
                String txt = holder.strText.getText().toString();
                txt = txt + "++;";
                holder.strText.setText(txt);
                strList.set(posi, txt);
            } else {
                String txt = strList.get(posi);
                txt = txt + "++;";
                strList.set(posi, txt);
            }
        }
    }

    在Activity中,调用updateView()方法,刷新数据。

    public class MainActivity extends Activity {
        private MainActivity mContext;
    
        private EditText idEdit;
    
        private TextView textView;
    
        private List<String> strList = new ArrayList<String>();
        private ListView listView;
        private TestListAdapter ListAdapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mContext = this;
    
            for (int i = 0; i < 100; i++) {
                strList.add("test data");
            }
    
            idEdit = (EditText) findViewById(R.id.edittext_id);
            textView = (TextView) findViewById(R.id.textview_modify);
    
            listView = (ListView) findViewById(R.id.listview);
            ListAdapter = new TestListAdapter(mContext, strList);
            listView.setAdapter(ListAdapter);
    
            //动态刷新
            textView.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String idStr = idEdit.getText().toString();
                    int idInt = Integer.parseInt(idStr);
                    ListAdapter.updataView(idInt, listView);//动态修改
                }
            });
        }
    }

    给出布局文件:

    <LinearLayout 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:background="#FFFFFF"
        android:orientation="vertical" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:orientation="horizontal" >
    
            <EditText
                android:id="@+id/edittext_id"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:hint="put modify id" />
    
            <TextView
                android:id="@+id/textview_modify"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="动态修改"
                android:textColor="#123456" />
        </LinearLayout>
    
        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>
    
    </LinearLayout>
  • 相关阅读:
    教育是什么?
    关于CTime::Format在Unicode下的输出问题及解决办法
    COleDateTime在Unicode下,Format函数会有问题。
    UNICODE字符集
    处理字符串String类和正则表达式
    关于datatable linq的转换
    js
    HDU 3874 Necklace
    HDU 1520 Anniversary party
    HDU 4314 Save the dwarfs
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/8169415.html
Copyright © 2011-2022 走看看