安卓基础-安卓开发之Listview自定义适配器继承BaseAdapter

Listview在安卓开发中可以说是一个非常重要的组件,具有一个界面效果,多条数据的表现。

下面介绍如何实现Listvie的适配器自定义,点击事件,填充内容。

开发使用Android Studio。

尤其强调listview的每个item一旦设置clickble=true则会导致抢占焦点,点击事件失效。

MainActivity.java

package com.zc.test;

import android.support.v7.app.AppCompatActivity;
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.List;

public class MainActivity extends AppCompatActivity {
    private ListView lv_test;
//    这里一定要构建示例不然报错
    private List<String> data = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        绑定组件
        findViews();
//        初始化传入listview的数据,示例三行
        data.add("数据1");
        data.add("数据2");
        data.add("数据3");
//        传入一个实例化的Myadapter对象,成功给予listview内容
        lv_test.setAdapter(new MyBaseAdapter(MainActivity.this,data));
//        设置点击事件
        lv_test.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this,"你点击的是第"+(i+1)+"行的数据",Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void findViews() {
//        绑定界面中的Listview
        lv_test = (ListView) findViewById(R.id.lv_test);
        lv_test.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivity.this,"你点击的是第"+(i+1)+"行的数据",Toast.LENGTH_SHORT).show();
                Log.d("Zc","Zc");
            }
        });
    }


}

对应布局文件:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"

    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.zc.test.MainActivity">
    <ListView
        android:id="@+id/lv_test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>


</LinearLayout>

item.xml

<TextView

    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:id="@+id/tv_tv"
    style="@style/Bar.White.Selectable"
    android:layout_centerVertical="true"
    xmlns:android="http://schemas.android.com/apk/res/android" />

MyBaseAdapter.java(自己写的适配器)

package com.zc.test;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by 16957 on 2018/7/28.
 */

public class MyBaseAdapter extends BaseAdapter{
    private List<String> data;
    private Context context;

    public MyBaseAdapter(Context context, List data) {
        this.data = data;
        this.context = context;
    }

    @Override
    public int getCount() {
//        该方法获得列表行数
        if(data==null)
            return 0;
        else
            return data.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 viewHolder;
        if(view==null){
            viewHolder=new ViewHolder();
//            填充item布局
            LayoutInflater inflater = LayoutInflater.from(context);
            view = inflater.inflate(R.layout.item, viewGroup, false);
            viewHolder.tv_test = (TextView) view.findViewById(R.id.tv_tv);
            view.setTag(viewHolder);
        }
        else{
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.tv_test.setText(data.get(i));

        return view;
    }
//    存放列表每行也就是每个item的组件,这里每个item自行定制,我这里只放了一个textview
    class ViewHolder{
        TextView tv_test;
    }
}

其他自定义风格不列举。

扫描二维码关注公众号,回复: 2724891 查看本文章

猜你喜欢

转载自blog.csdn.net/zhouchen1998/article/details/81265189