ListView-baseAdapter+操作item内部控件

工程结构图

main-xml

<?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="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/lv_main_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>

</LinearLayout>

item-xml

<?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="60dp"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/icon_img"
        android:layout_width="@dimen/dp_60"
        android:layout_height="@dimen/dp_60"
        android:src="@mipmap/ic_launcher_round" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="5"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title_tv"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_0"
            android:layout_weight="1"
            android:gravity="center" />

        <TextView
            android:id="@+id/time_tv"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_0"
            android:layout_weight="1"
            android:gravity="center" />

    </LinearLayout>

    <CheckBox
        android:id="@+id/cb_item_check"
        android:layout_width="@dimen/dp_0"
        android:layout_height="match_parent"
        android:layout_weight="1" />
</LinearLayout>

Acivity中代码

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends Activity {
    public static final boolean LOG_BOOT = true;
    public static final String TAG = "godv";
    //item的个数
    private static final int COUNT = 300;
    private List<MyTestBean> mBeans;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = findViewById(R.id.lv_main_show);
        mBeans = new ArrayList<>();
        for (int i = 0; i < COUNT; i++) {
            MyTestBean bean = new MyTestBean();
            bean.setmTime("godv_time:" + new Date());
            bean.setmTitle("godv_title:" + i);
            mBeans.add(bean);
        }
//        ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strings);
//        listView.setAdapter(stringArrayAdapter);
        MyBaseAdapter myBaseAdapter = new MyBaseAdapter(this);
        myBaseAdapter.setmList(mBeans);
        listView.setAdapter(myBaseAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this, "godv:" + i, Toast.LENGTH_SHORT).show();
                if (LOG_BOOT)
                    Log.i(TAG, mBeans.get(i).getmTitle());
            }
        });
    }

}

实体类

public class MyTestBean {
    private String mTitle;
    private String mTime;
    private boolean mIsGodv;

    public MyTestBean() {
    }

    public MyTestBean(String mTitle, String mTime, boolean mIsGodv) {
        this.mTitle = mTitle;
        this.mTime = mTime;
        this.mIsGodv = mIsGodv;
    }

    public String getmTitle() {
        return mTitle;
    }

    public void setmTitle(String mTitle) {
        this.mTitle = mTitle;
    }

    public String getmTime() {
        return mTime;
    }

    public void setmTime(String mTime) {
        this.mTime = mTime;
    }

    public boolean ismIsGodv() {
        return mIsGodv;
    }

    public void setmIsGodv(boolean mIsGodv) {
        this.mIsGodv = mIsGodv;
    }

    @Override
    public String toString() {
        return "MyTestBean{" +
                "mTitle='" + mTitle + '\'' +
                ", mTime='" + mTime + '\'' +
                ", mIsGodv=" + mIsGodv +
                '}';
    }
}

baseadapter类

package com.example.godv_view;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;

public class MyBaseAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener {
    private static final String TIP = "我是GODV";
    private Context mContext;
    MainActivity mMain;
    private List<MyTestBean> mList;

    public MyBaseAdapter() {
        super();
        mMain = new MainActivity();
    }

    public MyBaseAdapter(Context mContext) {
        this.mContext = mContext;
    }

    public List<MyTestBean> getmList() {
        return mList;
    }

    public void setmList(List<MyTestBean> mList) {
        this.mList = mList;
        //通知视图刷新
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder = null;
//        TextView textView = new TextView(mContext);
        //参数三 要不要加进去
        if (view == null) {
            //引入布局
            Log.i("guoshuaiyu", "null");
            view = LayoutInflater.from(mContext).inflate(R.layout.item_godv, viewGroup, false);
            //创建一个holder
            holder = new ViewHolder(view);
            //将converView与holder关联
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
//        TextView titleTv = view.findViewById(R.id.title_tv);
//        TextView timeTv = view.findViewById(R.id.time_tv);
        holder.mCheck.setText(i + "");
        holder.mCheck.setOnCheckedChangeListener(this);
        if (mList.get(i).ismIsGodv()) {
            holder.mTitleTv.setText(TIP);
            holder.mCheck.setChecked(true);
            holder.mIcon.setImageResource(R.mipmap.godb);
            view.setBackgroundColor(Color.GREEN);

        } else {
            holder.mTitleTv.setText(mList.get(i).getmTitle());
            holder.mIcon.setImageResource(R.mipmap.ic_launcher_round);
            holder.mCheck.setChecked(false);
            view.setBackgroundColor(Color.RED);
        }
        holder.mTimeTv.setText(mList.get(i).getmTime());
        return view;
    }

    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
//        Toast.makeText(compoundButton.getContext(), compoundButton.getText().toString(), Toast.LENGTH_SHORT).show();
        MyTestBean myTestBean = mList.get(Integer.parseInt(compoundButton.getText().toString()));
        if (b) {

            myTestBean.setmIsGodv(true);

        } else
            myTestBean.setmIsGodv(false);

        notifyDataSetChanged();
    }

    class ViewHolder {
        private TextView mTitleTv;
        private TextView mTimeTv;
        private CheckBox mCheck;
        private ImageView mIcon;
        public ViewHolder(View view) {
            if (MainActivity.LOG_BOOT)
                Log.i("godv", "构造器");
            this.mTitleTv = view.findViewById(R.id.title_tv);
            this.mTimeTv = view.findViewById(R.id.time_tv);
            this.mCheck = view.findViewById(R.id.cb_item_check);
            this.mIcon = view.findViewById(R.id.icon_img);
        }
    }
}

最终的效果图 忽略配色

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值