ListView

Posted nangongyibin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ListView相关的知识,希望对你有一定的参考价值。

1. Listview的入门

  • listview是一个垂直滚动的列表. 可以展示一些条目 每个条目长得都查不多.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>

 

2.listview里面展示的是一个条目一个条目的内容 每个条目的内容来自listAdapter 由于listAdapter默认实现地方法特别多,所以我们找到了listadapter的实现类—->baseAdapter,所以定义一个类继承BaseAdapter就可以了

    class myAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return 110;
        }

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

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            /*TextView textView = new TextView(MainActivity.this);
            textView.setText("天道酬勤");
            return textView;*/
            TextView textview;
            if (convertView == null) {
                textview = new TextView(MainActivity.this);
            } else {
                textview = (TextView) convertView;
            }
            textview.setText("天道酬勤");
            return textview;
        }
    }

  

3.listview和适配器关联

        Madapter madapter = new Madapter();
        //listView.setAdapter(madapter);

  

  • 代码实现过程 
    • 在布局中声明listview 
    • listview优化
    class myAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return 110;
        }

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

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            /*TextView textView = new TextView(MainActivity.this);
            textView.setText("天道酬勤");
            return textView;*/
            TextView textview;
            if (convertView == null) {
                textview = new TextView(MainActivity.this);
            } else {
                textview = (TextView) convertView;
            }
            textview.setText("天道酬勤");
            return textview;
        }
    }

  

 
    • 复杂listview效果制作
      • 把要展示的listview效果通过布局做出来
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/ic_launcher" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/iv"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="恐怖墙"
            android:textColor="@android:color/black"
            android:textSize="24sp" />

        <TextView
            android:id="@+id/tv2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="恐怖墙" />
    </LinearLayout>
</RelativeLayout>

  

      • 通过View类提供的打气筒服务把一个布局转换为View
View view = View.inflate(MainActivity.this, R.layout.item, null);

  

4.获取打气筒服务常见写法

  • 通过View类提供的一个静态方法获取打气筒服务
view = View.inflate(MainActivity.this, R.layout.item, null);

 

  • 通过布局填充器类获取打气筒服务
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,null);

 

  • 通过getsystemservice方法获取打气筒服务
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.item,null);

 

5.综合小案例(把数据库真实数据通过listview展示数据)

  • 代码实现步骤 
    • 先声明listview
<ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

 

    • 当点击查询按钮的时候 把数据封装到集合
My my = new My(this);
        SQLiteDatabase db = my.getWritableDatabase();//my.onCreate(db);
        ContentValues values = new ContentValues();
        values.put("name", "zhangsan");
        values.put("phone", 110);
        db.insert("info", null, values);
        mList = new ArrayList<>();
        Cursor cursor = db.query("info", null, null, null, null, null, null);
        while (cursor.moveToNext()) {
            Person person = new Person();
            Log.d(TAG, "onCreate: 有数据");
            String name = cursor.getString(1);
            int phone = cursor.getInt(2);
            person.setName(name);
            person.setPhone(phone);
            mList.add(person);
        }
        mLv.setAdapter(new myAdapter());

 

 
    • 创建listview适配器对象
 
   class myAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return mList.size();
        }

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

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = View.inflate(MainActivity.this, R.layout.item, null);
            }
            Person person = mList.get(position);
            TextView tv = convertView.findViewById(R.id.tv);
            TextView tv1 = convertView.findViewById(R.id.tv1);
            tv.setText(person.getName());
            tv1.setText(person.getPhone() + "");
            return convertView;
        }
    }

 

6.ArrayAdapter的使用

  • 不管什么adapter 功能都是一样的.功能就是adapter负责把数据展示到listview上
  • arrayAdapter的使用
    String[] menu = new String[]{"android", "java", "c", "c++", "html", "mysql"};
    private ListView mListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mListView = findViewById(R.id.lv);
        init();
        myAdapter myAdapter = new myAdapter();
        Madapter madapter = new Madapter();
        //mListView.setAdapter(madapter);
        mListView.setAdapter(new ArrayAdapter<String>(this,R.layout.item,R.id.tv1,menu));
    }

 

 

 

以上是关于ListView的主要内容,如果未能解决你的问题,请参考以下文章

片段中的ListView不显示

在片段中添加 ListView

ListView 未显示在片段中

在片段android中创建listview

按下后退按钮时正在重新创建 Listview 片段

Android App 在片段中创建 ListView 引用时关闭