From fbba6c450ca225b028c42387f5595df902475838 Mon Sep 17 00:00:00 2001 From: LuoChen-Hao <512337862@qq.com> Date: Fri, 7 Sep 2018 16:08:47 +0800 Subject: [PATCH] Add CommonBaseAdapter Add CommonBaseAdapter --- .../blackhaoutil/base/CommonBaseAdapter.java | 116 ++++++++++++++++++ .../blackhaoutil/base/TestActivity.java | 1 + .../blackhaoutil/base/TestAdapter.java | 45 +++++++ .../blackhaoutil/base/TestFragment.java | 17 +++ .../main/res/layout/activity_base_test.xml | 4 +- app/src/main/res/layout/adapter_test.xml | 23 ++++ app/src/main/res/layout/fragment_one.xml | 9 +- 7 files changed, 212 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/balckhao/blackhaoutil/base/CommonBaseAdapter.java create mode 100644 app/src/main/java/com/balckhao/blackhaoutil/base/TestAdapter.java create mode 100644 app/src/main/res/layout/adapter_test.xml diff --git a/app/src/main/java/com/balckhao/blackhaoutil/base/CommonBaseAdapter.java b/app/src/main/java/com/balckhao/blackhaoutil/base/CommonBaseAdapter.java new file mode 100644 index 0000000..67bcad0 --- /dev/null +++ b/app/src/main/java/com/balckhao/blackhaoutil/base/CommonBaseAdapter.java @@ -0,0 +1,116 @@ +package com.balckhao.blackhaoutil.base; + +import android.annotation.IdRes; +import android.content.Context; +import android.util.SparseArray; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +import java.util.List; + +/** + * Author : BlackHao + * Time : 2018/9/4 14:11 + * Description : ListView/GridView BaseAdapter + */ +public abstract class CommonBaseAdapter extends BaseAdapter { + + private List list; + private Context context; + + public CommonBaseAdapter(List list, Context context) { + this.list = list; + this.context = context; + } + + @Override + public int getCount() { + return list == null ? 0 : list.size(); + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @SuppressWarnings("unchecked") + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder; + if (convertView == null) { + convertView = View.inflate(context, getLayoutResId(), null); + viewHolder = new ViewHolder(); + //将控件与 ViewHolder 绑定 + int[] viewIdArray = bindView(); + for (int aViewIdArray : viewIdArray) { + viewHolder.bindViewById(convertView, aViewIdArray); + } + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + initData(viewHolder, list.get(position), position); + return convertView; + } + + /** + * 获取 layout 文件 + * + * @return layout 文件 ID + */ + protected abstract int getLayoutResId(); + + /** + * 将控件与 ViewHolder 绑定 + * + * @return 需要绑定的控件 ID 数组 + */ + protected abstract int[] bindView(); + + /** + * 绑定显示数据,增加回调监听等操作 + * + * @param holder ViewHolder + * @param position 对应的位置 + * @param t list.get(position)数据 + */ + protected abstract void initData(ViewHolder holder, T t, int position); + + public class ViewHolder { + private SparseArray viewSparseArray; + + ViewHolder() { + this.viewSparseArray = new SparseArray<>(); + } + + /** + * 通过 id获取 View + * + * @param id View ID + * @param View 类型 + * @return 对应的 View + */ + @SuppressWarnings("unchecked") + public E getViewById(@IdRes int id) { + return (E) viewSparseArray.get(id); + } + + /** + * 通过 id 获取 View并绑定到 ViewHolder + * + * @param view 布局文件 View + * @param id View ID + */ + public void bindViewById(View view, @IdRes int id) { + viewSparseArray.put(id, view.findViewById(id)); + } + + } + +} diff --git a/app/src/main/java/com/balckhao/blackhaoutil/base/TestActivity.java b/app/src/main/java/com/balckhao/blackhaoutil/base/TestActivity.java index 0390b08..af54cea 100644 --- a/app/src/main/java/com/balckhao/blackhaoutil/base/TestActivity.java +++ b/app/src/main/java/com/balckhao/blackhaoutil/base/TestActivity.java @@ -27,6 +27,7 @@ public class TestActivity extends BaseActivity { protected void initUI() { setContentView(R.layout.activity_base_test); ButterKnife.bind(this); + //replaceFragment replaceFragment(R.id.frame_1, new TestFragment()); replaceFragment(R.id.frame_2, new TestFragment()); } diff --git a/app/src/main/java/com/balckhao/blackhaoutil/base/TestAdapter.java b/app/src/main/java/com/balckhao/blackhaoutil/base/TestAdapter.java new file mode 100644 index 0000000..3c5a239 --- /dev/null +++ b/app/src/main/java/com/balckhao/blackhaoutil/base/TestAdapter.java @@ -0,0 +1,45 @@ +package com.balckhao.blackhaoutil.base; + +import android.content.Context; +import android.widget.ImageView; +import android.widget.TextView; + +import com.balckhao.blackhaoutil.R; + +import java.util.List; + +/** + * Author : BlackHao + * Time : 2018/9/4 14:58 + * Description : + */ +public class TestAdapter extends CommonBaseAdapter { + + public TestAdapter(List list, Context context) { + super(list, context); + } + + @Override + protected int getLayoutResId() { + return R.layout.adapter_test; + } + + @Override + protected int[] bindView() { + return new int[]{R.id.test_iv, R.id.test_tv}; + } + + @Override + protected void initData(ViewHolder holder, String s, int position) { + TextView tv = holder.getViewById(R.id.test_tv); + ImageView iv = holder.getViewById(R.id.test_iv); + tv.setText("Position:" + position + " Content : " + s); + if (s.endsWith("pdf")) { + iv.setBackgroundResource(R.drawable.pdf); + } else if (s.endsWith("ppt")){ + iv.setBackgroundResource(R.drawable.ppt); + }else { + iv.setBackgroundResource(R.drawable.unkown_file); + } + } +} diff --git a/app/src/main/java/com/balckhao/blackhaoutil/base/TestFragment.java b/app/src/main/java/com/balckhao/blackhaoutil/base/TestFragment.java index 0a5b8cb..106a93c 100644 --- a/app/src/main/java/com/balckhao/blackhaoutil/base/TestFragment.java +++ b/app/src/main/java/com/balckhao/blackhaoutil/base/TestFragment.java @@ -2,9 +2,12 @@ package com.balckhao.blackhaoutil.base; import android.view.View; import android.widget.ImageView; +import android.widget.ListView; import com.balckhao.blackhaoutil.R; +import java.util.ArrayList; + import butterknife.Bind; import butterknife.ButterKnife; @@ -18,6 +21,8 @@ public class TestFragment extends BaseFragment { @Bind(R.id.iv_1) ImageView iv1; + @Bind(R.id.lv_test) + ListView lvTest; @Override protected int initLayoutRes() { @@ -32,6 +37,17 @@ public class TestFragment extends BaseFragment { @Override protected void initData() { + ArrayList arrayList = new ArrayList<>(); + arrayList.add("Hello World, Android.ppt"); + arrayList.add("Hello World, Java.pdf"); + arrayList.add("Hello World, JS.pdf"); + arrayList.add("Hello World, C.ppt"); + arrayList.add("Hello World, C++"); + arrayList.add("Hello World, C#.pdf"); + arrayList.add("Hello World, Python.ppt"); + arrayList.add("Hello World, PHP"); + TestAdapter testAdapter = new TestAdapter(arrayList, getContext()); + lvTest.setAdapter(testAdapter); } @Override @@ -44,4 +60,5 @@ public class TestFragment extends BaseFragment { super.onDestroyView(); ButterKnife.unbind(this); } + } diff --git a/app/src/main/res/layout/activity_base_test.xml b/app/src/main/res/layout/activity_base_test.xml index 8f043cd..c82e660 100644 --- a/app/src/main/res/layout/activity_base_test.xml +++ b/app/src/main/res/layout/activity_base_test.xml @@ -14,7 +14,7 @@ @@ -26,7 +26,7 @@ diff --git a/app/src/main/res/layout/adapter_test.xml b/app/src/main/res/layout/adapter_test.xml new file mode 100644 index 0000000..a0a648a --- /dev/null +++ b/app/src/main/res/layout/adapter_test.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_one.xml b/app/src/main/res/layout/fragment_one.xml index b410be6..d546a0c 100644 --- a/app/src/main/res/layout/fragment_one.xml +++ b/app/src/main/res/layout/fragment_one.xml @@ -7,7 +7,14 @@ android:id="@+id/iv_1" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_centerInParent="true" + android:layout_centerHorizontal="true" android:contentDescription="@null" /> + + \ No newline at end of file -- GitLab