定製ListView介面
阿新 • • 發佈:2018-12-05
建立自定義Adapter命名為TestAdapter
public class TestAdapter extends BaseAdapter { private Context mContent; private List<Fruit> mData; public TestAdapter(Context context, List<Fruit> data) { this.mContent = context; this.mData = data; } @Override public int getCount() { return mData== null? 0 :mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int i) { return i; } @Override public View getView(int possition, View view, ViewGroup viewGroup) { ViewHolde viewHodle; if (view == null) { viewHodle = new ViewHolde(); view = LayoutInflater.from(mContent).inflate(R.layout.item,viewGroup,false); viewHodle.imageView = view.findViewById(R.id.image); viewHodle.name = view.findViewById(R.id.name); viewHodle.size = view.findViewById(R.id.size); viewHodle.button = view.findViewById(R.id.button); view.setTag(viewHodle); }else { viewHodle = (ViewHolde) view.getTag(); } final Fruit fruit = mData.get(possition); viewHodle.name.setText(fruit.getName()); viewHodle.imageView.setImageResource(fruit.getImageId()); viewHodle.size.setText(fruit.getSize()); viewHodle.button.setText(fruit.getButtonText()); viewHodle.button.setTag(possition); viewHodle.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //TODO 點選事件 switch ((Integer) view.getTag()){ case 0: Util.showToast(mContent,"1"); break; case 1: Util.showToast(mContent,"2"); break; case 2: Util.showToast(mContent,"3"); break; } } }); return view; } class ViewHolde { ImageView imageView; TextView name; TextView size; Button button; } }
當view為空的時候,建立一個ViewHolder物件,並將控制元件的例項都存放在ViewHolder裡,然後呼叫View的setTag()方法,將ViewHolder物件儲存在View中。當convertView不為空的時候則呼叫View的getTag()方法,把ViewHolder重新取出。這樣所有控制元件的例項都快取在了ViewHolder裡,就沒有必要每次都通過findViewById()方法來獲取控制元件例項了。
MainActivity檔案
public class MainActivity extends AppCompatActivity { private List<Fruit> DataList = new ArrayList<Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_listview); initDataList(); // 初始化 TestAdapter adapter = new TestAdapter(MainActivity .this,DataList); ListView listView = (ListView) findViewById(R.id.list_view_2); listView.setAdapter(adapter); } private void initDataList() { Fruit a = new Fruit("王者農藥", R.drawable.log,"下載","10m"); DataList.add(a); Fruit b = new Fruit("吃雞戰場",R.drawable.log2,"下載","20m"); DataList.add(b); Fruit c = new Fruit("氪金", R.drawable.log3,"下載","30m"); DataList.add(c); } }
my_listview.xml檔案
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/list_view_2" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
item.xml檔案
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:descendantFocusability="blocksDescendants">
<ImageView
android:id="@+id/image"
android:src="@drawable/log"
android:layout_width="70dp"
android:layout_height="70dp"
/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:layout_weight="3">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="2dp"
android:text="亂鬥堂"
android:textColor="#130000"
android:textSize="18dp"/>
<TextView
android:id="@+id/size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:textColor="#93851f"
android:text="65M"
android:textSize="20dp"/>
</LinearLayout>
<Button
android:layout_weight="1"
android:id="@+id/button"
android:layout_marginTop="12dp"
android:layout_width="40dp"
android:layout_height="50dp"
android:text="下載"
android:textSize="20dp"/>
</LinearLayout>
Android_listview設定每條資訊的間距
設定listView的item間距,可以在xml佈局檔案中的listView下設定xml屬性:
android:divider="#00000000"
android:dividerHeight=“18dp”
解釋:分隔線透明,高度為18dp。