超常见控件ListView
- 大家在日常使用各种app时,有没有注意到,你会常常向上滑动屏幕来浏览下面的信息。例如滑动QQ看消息列表,翻阅微博最新消息等等。
- 那数据是如何显示到ListView里面的呢?(即呈现在用户界面上)
1. 存储数据可以用数组或者List集合。
2. 使用ArrayAdapter(数组适配器)作为桥梁,将数据绑定在ArrayAdapter上面。
3. 通过适配器将数据更新到ListView上进行展示。 - 先实现一个简单的例子:展示大量水果名
//主活动代码MainActivity.java
public class MainActivity extends AppCompatActivity {
String[] fruits = {"Apple", "Banana", "Orange", "Watermelon", "Pear", "Grape", "Pineapple",
"Cheery", "Mango", "Apple", "Banana", "Orange", "Watermelon", "Pear"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, fruits);
ListView listView = (ListView)findViewById(R.id.list_view);
listView.setAdapter(adapter);//关联适配器
}
}
//布局文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="水果列表展示"
android:gravity="center_horizontal"
android:textSize="24sp" />
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
-
界面呈现如下:
简单ListView实现 补充:
-
ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, fruits);
适配器有很多种,这里我们使用ArrayAdapter来实现,注意ArrayAdapter的构造函数中依次传入当前上下文(就是当前的Activity),ListView子布局的id,需要适配的数据。这里的simple_list_item_1是Android内置的布局文件,里面只有一个TextView,用于显示一段简单的文本。 -
ListView listView = (ListView)findViewById(R.id.list_view);
创建ListView对象,通过findViewById()方法找到ListView的id名称,使用(ListView)强制转型。 -
listView.setAdapter(adapter);
调用ListView的setAdapter()方法,就构建好的适配器对象传进去,数据和ListView控件的联系就建立起来了。
实现简单备忘录
- 准备实现的功能:
- 一个提示输入文字的控件,输入准备添加的文字。
- 点击添加按钮向ListView中添加输入的文字。
- 使用ListView展示添加的数据。
- 按照要求,先实现整体布局。使用LinearLayout线性布局,分别使用TextView、EditView、Button、ListView控件实现大致框架。
布局文件代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="请输入备忘录内容"
android:gravity="center"
android:textAlignment="center"
android:textSize="24sp" />
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="编辑..."/>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加到备忘录"/>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
-
实现效果:
大致框架 - 为Button对象设置一个监听器,在编辑框输入添加的文字,点击按钮后添加到ListView控件。
主活动代码如下:
public class MainActivity extends AppCompatActivity{
EditText ed;
Button button;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
ed = (EditText)findViewById(R.id.edit);
adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1);
ListView listView = (ListView)findViewById(R.id.list_view);
listView.setAdapter(adapter);//关联适配器
adapter.add("看电影");
adapter.add("听歌");
adapter.add("看书");
adapter.add("吃饭");
adapter.add("散步");
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
String add = ed.getText().toString();
adapter.add(add);
}
});
}
}
- 补充:
- 细心的朋友会发现上面的代码里并没有传入ArrayAdapter构造函数所需的第三个参数,而是采用adapter自带的add()方法初始化了一些数据。
- 点击按钮后,获取添加的文字赋给String型变量add,再使用add()方法添加到ListView中实现整个功能。
-
实现效果如下(添加文字前):
添加文字前 -
添加文字后:
添加hello