adapter(适配器)

    关键字  ListView ArrayAdapter , SimpleAdapter,自定义适配器
    当我们做界面的时候,想要界面跑起来,同时但我们点击的时候,机器做出回应,这时候我们
    首先就要用到
    ListView 实现界面一条一条的排列,当界面满格时可以向下滑动,但是每条界面没有信息,当
    我们想要有信息时就要用到adapter(适配器),他是数据源与ListView之间建立桥梁,是实现可编辑的信息自由显示,类似于View控件,
    但是可以对每一条编辑页面的快速生成,避免了每一条信息的都需要重复编辑
    首先是ArrayAdapter
    ArrayAdapter的实现需要1.上下文(context) 2.一条TextView.xml文档,里面不能放任何其他控件 3.一维数组
    public class List_Array_Activity extends AppCompatActivity {

    public ListView mListView;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list__array_layout);//本类的activity_list__array_layout.xml 里面需要定义一个ListView控件

        mListView= (ListView) findViewById(R.id.ListView_first_view);//定义id好找
        
        String[] array = new String[]{"java","j2se","android","ui","css","structs","javascript","html","xml"};//一维数组的每一个对象都是依次显示的对象
        ArrayAdapter arrayadapter = new ArrayAdapter(this,R.layout.activity_demo__text_view_layout,array);
        //this指代context上下文,activity_demo__text_view_layout是TextView.xml文档,array是数组

        mListView.setAdapter(arrayadapter);//注册启动
    }
}
  SimpleAdapter是实现可编辑页面的适配器
  关键字 1.context应用上下文 2.编辑页面的xml文档 3.HashMap的键值对的键 4.自定义的界面xml文档里相应的编码
  public class Simple_Adapter_Activity extends AppCompatActivity implements AdapterView.OnItemClickListener{//点击是实现事件回应

    public ListView mListView;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple__adapter_layout);
        mListView= (ListView) findViewById(R.id.ListView_Simple);

       ArrayList arrayList =listData();

       String[] from = {"icon","title","content"};//HashMap的键值对的键,用来标记不同的事件
       
       int[] to  = {R.id.simple_demo_imageview,R.id.simple_demo_textviewtitle,R.id.simple_demo_textviewcontent};
       //to 里面的每一id值都是自定义的界面xml文档里相应的编码
       SimpleAdapter simpleAdapter = new SimpleAdapter(this,arrayList,R.layout.activity_demo__simple_layout,from,to);
        

       mListView.setAdapter(simpleAdapter);
      
        mListView.setOnItemClickListener(this);//注册注册注册
    }
    public ArrayList listData(){
        ArrayList arrayList = new ArrayList();
        HashMap<String,Object> item = new HashMap<>();
        item.put("icon",R.drawable.liying6);//"icon"HashMap的键值对的键 R.drawable.liying6是具体的值
        item.put("title","赵丽颖");
        item.put("content","资料");
        arrayList.add(item);

        item = new HashMap<>();
        item.put("icon",R.drawable.liying6);
        item.put("title","赵丽颖");
        item.put("content","资料");
        arrayList.add(item);
  return arrayList;
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {//接口 AdapterView.OnItemClickListener的方法
        switch(i){//HashMap的值从零开始
            case 0:
                Intent intent = new Intent(this, Android_log_Activity.class);
                startActivity(intent);
                break;
            case 1:
               intent = new Intent(this, Button_activity.class);
                startActivity(intent);
                break;
            case 2:
              intent = new Intent(this, Code_Activity.class);
                startActivity(intent);
                break;
            case 3:
                intent = new Intent(this, Linear_Activity.class);
                startActivity(intent);
                break;
        }
        MySimpleAdapter mySimpleAdapter = (MySimpleAdapter) adapterView.getAdapter();//得到mySimpleAdapter不能用new
        HashMap<String ,Object> item = (HashMap<String, Object>) mySimpleAdapter.getItem(i);//得到HashMap的具体对象
        String title = (String) item.get("title");
        String content = (String) item.get("content");
        
        Snackbar.make(view,title,Snackbar.LENGTH_SHORT).show();

    }
    自定义适配器
    客户的想法总是千奇百怪,为了满足需要,我们可以自己定义一个适配器
    public class MySimpleAdapter extends BaseAdapter {//自定义适配器必须继承BaseAdapter
    
    public List<HashMap<String,Object>> list = new ArrayList<>();//本适配器打算的用途
    public LayoutInflater layoutInflater;//解析器,布局文件的解析全靠它
    
    public MySimpleAdapter(Context context,List<HashMap<String,Object>> list){
        this.list=list;
        layoutInflater = LayoutInflater.from(context);
    }
    public int getCount() {
        return list.size();//List<HashMap<String,Object>>所装的对象多少
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);//得到HashMap的具体对象
    }

    @Override
    public long getItemId(int i) {//得到HashMap的具体对象的id
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = layoutInflater.inflate(R.layout.activity_demo__simple_layout,null);//这是我们想要界面的视图activity_demo__simple_layout是xml基本布局,v 的布局就是它

        ImageView iconimag = (ImageView) v.findViewById(R.id.simple_demo_imageview);//activity_demo__simple_layout布局里每个控件的id
        TextView titletxt = (TextView) v.findViewById(R.id.simple_demo_textviewtitle);
        TextView contenttxt = (TextView) v.findViewById(R.id.simple_demo_textviewcontent);

        HashMap<String,Object> item = (HashMap<String, Object>) getItem(i);//获取存放的每一条项
        int icon = (int) item.get("icon");//通过键获得值

        String title = (String) item.get("title");
        String content  = (String) item.get("content");

        iconimag.setImageResource(icon);//从新赋值
        titletxt.setText(title);
        contenttxt.setText(content);
        return v;
    }
}
    
   


下面是一个简单的示例代码,展示如何创建一个自定义适配器(Adapter)来填充ListView的数据: ```java public class MyAdapter extends BaseAdapter { private Context mContext; private List<String> mData; public MyAdapter(Context context, List<String> data) { mContext = context; mData = data; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { // 如果convertView为空,说明还没有被实例化,需要创建ViewHolder对象,并将其与布局文件进行绑定 convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false); viewHolder = new ViewHolder(); viewHolder.textView = convertView.findViewById(R.id.text_view); convertView.setTag(viewHolder); } else { // 如果convertView不为空,则直接从convertView中获取ViewHolder对象 viewHolder = (ViewHolder) convertView.getTag(); } // 设置数据 String item = mData.get(position); viewHolder.textView.setText(item); return convertView; } // ViewHolder类,用于缓存控件实例,避免重复查找 private static class ViewHolder { TextView textView; } } ``` 在上述代码中,首先定义了一个自定义适配器`MyAdapter`,该适配器继承自`BaseAdapter`。在构造方法中传入上下文和数据源,然后实现了必要的方法,包括`getCount()`、`getItem()`、`getItemId()`和`getView()`。 在`getView()`方法中,首先判断convertView是否为null,如果为null则说明需要创建新的布局实例,并将其与ViewHolder对象进行绑定。然后通过ViewHolder对象获取布局中的控件实例,并设置数据。 最后,可以使用`setAdapter()`方法将自定义适配器与ListView进行绑定: ```java ListView listView = findViewById(R.id.list_view); MyAdapter adapter = new MyAdapter(this, dataList); listView.setAdapter(adapter); ``` 其中,`dataList`是一个包含要显示的数据的List集合。通过调用`setAdapter()`方法,将自定义适配器与ListView绑定,即可实现数据填充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值