Android(安卓)Adapter的使用
16lz
2022-03-17
ArrayAdapter
public class MainActivity extends Activity { private ListView lv;//控件引用声明 private List list;//数据源集合引用声明 private ArrayAdapter adapter;//适配器声明 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.listView1);//找出ListView对象 list = new ArrayList();//数据源集合创建 for(int i=1;i<=50;i++){ list.add(Integer.toString(i));//往数据源集合中添加50个字符串 } //创建适配器,第一个参数上下文,第二个是单项的布局,第三个是数据源,这里已经将数据源整合到适配器 adapter = new ArrayAdapter(this, R.layout.my_item, list);//用自己定义的单项布局// adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list); lv.setAdapter(adapter);//再将适配器组装到ListView控件上 }}
SimpleAdapter
//创建简单适配器对象,第一个参数上下文,第二个数据源,第三个单项布局//第四个表示要展现在ListView单项视图中的数据的键,是一个字符串数组//第五个表示展示上述数据的控件的id,是一个int数组SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.item, new String[]{"name","age"}, new int[]{R.id.textView1,R.id.textView2});//位于第一个的name的值放到同样第一个的textView1中,位于第二个的age的值放到同样第二个的textView2中
BaseAdapter
public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; private Context mContext; private List mDatas; public MyAdapter(Context context, List mDatas) { mInflater = LayoutInflater.from(context); this.mContext = context; this.mDatas = mDatas; } @Override public int getCount() { return mDatas.size(); } @Override public Object getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.item_single_str, parent, false); viewHolder = new ViewHolder(); viewHolder.mTextView = (TextView) convertView .findViewById(R.id.id_tv_title); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.mTextView.setText(mDatas.get(position)); return convertView; } private final class ViewHolder { TextView mTextView; } }
RecyclerAdapter
public class MyAdapter extends RecyclerView.Adapter{ /** * 展示数据 */ private ArrayList mData; /** * 事件回调监听 */ private MyAdapter.OnItemClickListener onItemClickListener; public MyAdapter(ArrayList data) { this.mData = data; } public void updateData(ArrayList data) { this.mData = data; notifyDataSetChanged(); } /** * 添加新的Item */ public void addNewItem() { if(mData == null) { mData = new ArrayList<>(); } mData.add(0, "new Item"); notifyItemInserted(0); } /** * 删除Item */ public void deleteItem() { if(mData == null || mData.isEmpty()) { return; } mData.remove(0); notifyItemRemoved(0); } /** * 设置回调监听 * * @param listener */ public void setOnItemClickListener(MyAdapter.OnItemClickListener listener) { this.onItemClickListener = listener; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // 实例化展示的view View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_rv_item, parent, false); // 实例化viewholder ViewHolder viewHolder = new ViewHolder(v); return viewHolder; } @Override public void onBindViewHolder(final ViewHolder holder, int position) { // 绑定数据 holder.mTv.setText(mData.get(position)); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { if(onItemClickListener != null) { int pos = holder.getLayoutPosition(); onItemClickListener.onItemClick(holder.itemView, pos); } } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if(onItemClickListener != null) { int pos = holder.getLayoutPosition(); onItemClickListener.onItemLongClick(holder.itemView, pos); } //表示此事件已经消费,不会触发单击事件 return true; } }); } @Override public int getItemCount() { return mData == null ? 0 : mData.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { TextView mTv; public ViewHolder(View itemView) { super(itemView); mTv = (TextView) itemView.findViewById(R.id.item_tv); } } public interface OnItemClickListener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); }}
更多相关文章
- android分组数据适配器demo
- android之Gallery
- Android实现CoverFlow效果三
- Android自动提示文本框(AutoCompleteTextView)
- Android之Adapter用法总结
- Android开发秘籍学习笔记(五)
- Android第一行代码(第二版)
- 创建适配器时报:ERROR/AndroidRuntime(1703): Caused by: androi
- 做android 开发遇到的问题及解决办法记录