一种优雅的书写ListView的Adapter

主Activity

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ArrayList<FunctionBean> dataList;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = findViewById(R.id.listView);
        initData();
        myAdapter = new MyAdapter();
        listView.setAdapter(myAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                myAdapter.onClick(position);
            }
        });
    }

    class MyAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return dataList != null ? dataList.size() : 0;
        }

        @Override
        public FunctionBean getItem(int position) {
            if (position < 0 && position >= dataList.size()) {
                return null;
            }
            return dataList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            MyViewHolder viewHolder = null;
            if (convertView == null) {
                viewHolder = new MyViewHolder(parent);
            } else {
                viewHolder = (MyViewHolder) convertView.getTag();
            }
            bindData(viewHolder, position);
            return viewHolder.get();
        }

        private void bindData(MyViewHolder viewHolder, int position) {
            if (viewHolder == null) {
                return;
            }
            viewHolder.ivImage.setBackgroundResource(getItem(position).getFunctionId());
            viewHolder.tvText.setText(getItem(position).getFunctionName());
        }

        public void onClick(int position) {
            FunctionBean item = getItem(position);
            item.onClik();
        }
    }

    static class MyViewHolder {
        ImageView ivImage;
        TextView tvText;
        View convertView;

        public MyViewHolder(ViewGroup parent) {
            convertView = View.inflate(parent.getContext(), R.layout.function_adapter, null);
            ivImage = convertView.findViewById(R.id.ivImage);
            tvText = convertView.findViewById(R.id.tvText);
            convertView.setTag(this);
        }

        View get() {
            return convertView;
        }
    }

    private void initData() {
        dataList = dataList == null ? new ArrayList<FunctionBean>() : dataList;
        dataList.clear();
        dataList.add(createFunctionBean(R.drawable.ic_launcher_foreground, "音量", () -> Toast.makeText(MainActivity.this, "音量", Toast.LENGTH_SHORT).show()));
        dataList.add(createFunctionBean(R.drawable.ic_launcher_foreground, "键盘", () -> Toast.makeText(MainActivity.this, "键盘", Toast.LENGTH_SHORT).show()));
    }

    private FunctionBean createFunctionBean(int functionId, String functionName, FunctionBean.Listener listener) {
        return new FunctionBean(functionId, functionName, listener);
    }
}

构造模型数据

package com.example.testdemo;

public class FunctionBean {
    private int functionId;
    private String functionName;
    private Listener listener;

    public FunctionBean(int functionId, String functionName, Listener listener) {
        this.functionId = functionId;
        this.functionName = functionName;
        this.listener = listener;
    }

    public int getFunctionId() {
        return functionId;
    }

    public void setFunctionId(int functionId) {
        this.functionId = functionId;
    }

    public String getFunctionName() {
        return functionName;
    }

    public void setFunctionName(String functionName) {
        this.functionName = functionName;
    }

    public void onClik() {
        if (listener != null){
            listener.onClick();
        }
    }
    public interface Listener {
        void onClick();
    }
}

Adapter一种写法 package com.xxkjx.jiusanqi; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class NewsListViewAdapter extends BaseAdapter { List<News> list; LayoutInflater inflater; Context context; public NewsListViewAdapter(List<News> list, Context context) { super(); this.list = list; this.context = context; inflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.activity_news_list_item, null); viewHolder = new ViewHolder(); viewHolder.title = (TextView) convertView .findViewById(R.id.tv_news_title); viewHolder.publish = (TextView) convertView .findViewById(R.id.tv_news_publish); viewHolder.brief = (TextView) convertView .findViewById(R.id.tv_news_brief); viewHolder.image = (ImageView) convertView .findViewById(R.id.img_news); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.title.setText(list.get(position).getTitle()); viewHolder.publish.setText(list.get(position).getPubblish()); viewHolder.brief.setText(list.get(position).getBrief()); viewHolder.image.setImageResource(list.get(position).getImg()); return convertView; } class ViewHolder { TextView title; TextView publish; TextView brief; ImageView image; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值