写此文章仅为记录所学习的过程,供大家参考
这篇文章是更便捷的使用适配器Adapter,其中用到了插件有:
可参考我写过的一篇如何配置Butterknife。
好了话不多说,上代码:
首先这是所需要的一些文件
你需要一个列表时(以LisView为例),你需要在你的主页面布局文件中添加控件ListView,即在
activity_main中
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.asus.texttoadapter.MainActivity"> <ListView android:id="@+id/lv_text" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
之后,需要为ListView添加一个item,即一个列表中重复的布局。新建布局item_text,在
item_text中
<?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="100dp" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是第" android:textSize="30sp"/> <TextView android:id="@+id/item_text_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" android:textSize="30sp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="条数据" android:textSize="30sp"/> </LinearLayout>
为你需要更改的控件添加id,即在我这个样例中中间的数据为我需要更改的控件。
作为一个ListView,需要一个List来填充其中的数据,但是,在一般情况下,每一个List有不同的组合与搭配,例如
private List<String>list;
中是以String为List中每个item需要的数据,但是在一个item需要多个数据的情况下,这种单一的数据类型便不能满足,这时候就需要自己新建一种类型,即新建一个java文件。
TextModel
public class TextModel { public int num; public TextModel(int num) { this.num = num; } }
其中,因为我只需要一个int类型的数据,所以我只申请了一个数据。
接下来,便是我写这篇文章的要点,适配器Adater,Adapter的作用与其名字相同,是为了讲我们的List适配进我们的ListView中。即在
TextAdapter
public class TextAdapter extends BaseAdapter { private Context mContext; private List<TextModel> lists; public TextAdapter(Context context, List<TextModel> dataList) { mContext = context; lists = dataList; } @Override public int getCount() { return lists.size(); } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { LayoutInflater vi = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = vi.inflate(R.layout.item_text, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (getCount() != 0) { TextModel model = (TextModel) getItem(position); if (model != null) { holder.itemTextNum.setText(model.num + ""); } } return convertView; } static class ViewHolder { @InjectView(R.id.item_text_num) TextView itemTextNum; ViewHolder(View view) { ButterKnife.inject(this, view); } } }
在这里,就不细讲Adapter中的详细内容,本文章只是为了记录,复用。
最后,在我们的主页面中添加相应代码,即在
MainActity
public class MainActivity extends AppCompatActivity { @InjectView(R.id.lv_text) ListView lvText; private List<TextModel> textList; private TextModel textModel; private TextAdapter textAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initVariables(); setContentView(R.layout.activity_main); ButterKnife.inject(this); initView(); } private void initVariables() { textList = new ArrayList<>(); textAdapter = new TextAdapter(this, textList); } private void initView() { initDate(); lvText.setAdapter(textAdapter); textAdapter.notifyDataSetChanged(); } private void initDate() { textModel = new TextModel(1); textList.add(textModel); textModel = new TextModel(2); textList.add(textModel); } }
多谢观看。
Create By 2018,4,12