Android中ListView動態新增、移除itemView
阿新 • • 發佈:2019-02-13
ListView是Android專案中經常用到的一個控制元件,Listview用於顯示資料,同時我們經常會遇到要給ListView新增或是移除itemView,所以,寫了一個小小的demo解決這個小問題。
activity_main.xml程式碼:
<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:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/message" android:textSize="18sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="add" android:text="@string/add" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="del" android:text="@string/del" /> </LinearLayout> <ListView android:id="@+id/lv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10dp" /> </LinearLayout>
在main頁面兩個按鈕:新增、移除,用於操作ListView的itemView,一個ListView。
不逐步解釋,直接上程式碼:
MainActivity.java:
package com.yx.listview1.ui; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ListView; import com.yx.listview1.R; import com.yx.listview1.adapter.MyListViewAdapter; public class MainActivity extends Activity { private final String TAG = MainActivity.class.getName(); private ListView lv; private MyListViewAdapter adapter; private String text; private static int count = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); // 例項化 adapter adapter = new MyListViewAdapter(MainActivity.this); // listview繫結adapter介面卡 lv.setAdapter(adapter); } /** 新增item */ public void add(View view) { text = " --- item -- " + count + " ---"; adapter.addData(text); adapter.notifyDataSetChanged(); count++; Log.i(TAG, "count---" + count); } /** 移除item */ public void del(View view) { adapter.delData(); adapter.notifyDataSetChanged(); // 判斷是否>0 if (count > 0) count--; Log.i(TAG, "count---" + count); } private void initView() { lv = (ListView) findViewById(R.id.lv);//初始化控制元件 } }
MyListViewAdapter.java:
package com.yx.listview1.adapter; import java.util.ArrayList; import java.util.List; import com.yx.listview1.R; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyListViewAdapter extends BaseAdapter { private Context context; private List<String> datas = new ArrayList<String>(); public MyListViewAdapter(Context context) { this.context = context; } /** 新增item資料 */ public void addData(String text) { if (datas != null) datas.add(text);// 新增資料 } /** 移除item資料 */ public void delData() { if (datas != null && datas.size() > 0) datas.remove(datas.size() - 1);// 移除最後一條資料 } @Override public int getCount() { // TODO Auto-generated method stub if (datas == null) return 0; return datas.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return datas.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } /** * listview要判斷item的位置,第一條,最後一條和中間的item是不一樣的。 */ @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub // 判斷datas資料條數是否>1 if (datas.size() > 1) { // 判斷位置 頂部、中間、底部 if (position == 0) { // 第一條資料 位置在頂部 convertView = View.inflate(context, R.layout.list_item_top,null); } else if (position == datas.size() - 1) { // 底部位置的資料 convertView = View.inflate(context, R.layout.list_item_bottom,null); } else { // 中間位置的資料 convertView = View.inflate(context, R.layout.list_item_middle,null); } } else { // 只有一條資料 convertView = View.inflate(context, R.layout.list_item_single, null); } String text = datas.get(position); // 設定文字 ((TextView) convertView.findViewById(R.id.title)).setText(text); return convertView; } }
如圖: