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效果通过布局做出来
- 复杂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的主要内容,如果未能解决你的问题,请参考以下文章