通过ArrayList显示数据首先要绑定一个ArrayAdapter(适配器)然后将数据传入,详细效果如下:
final ArrayAdapter<String> aa;
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,myitems);
myListView.setAdapter(adapter );
在这里R.layout.simple_list_item_1是系统默认布局,myitems为一个String数组,存储需要进行表达的数据。
下面来聊聊自定义适配器。
1.实例化自定义适配器
2.重写getView方法用于数据映射(系统将通过此函数绘制每行数据)。
getView()の参数说明(position表示第几行,convertView为自定义item布局(通过LayoutInflater提取出来的))
3.获取组件并进行设置。
源码如下:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:orientation="vertical">
<EditText
android:id="@+id/myEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入"
android:contentDescription="输入文本"/>
<ListView
android:id="@+id/myListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
myitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/item_thumbnail"
android:layout_height="48dip"
android:layout_width="48dip"
/>
<TextView
android:id="@+id/item_file_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingLeft="5dip"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=""
android:id="@+id/textView2" />
</LinearLayout>
MainActivity.java
package com.android.simonnear.mytest;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private ListView myListView;
private EditText myEditText;
List<Book> fileList = new ArrayList<Book>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myListView = (ListView)findViewById(R.id.myListView);
myEditText = (EditText)findViewById(R.id.myEditText);
Book b = new Book();
b.setName("Demo1");
b.setYear("1999");
fileList.add(b);
b = new Book();
b.setName("Demo2");
b.setYear("2000");
fileList.add(b);
final TestAdapter adapter = new TestAdapter(MainActivity.this,
R.layout.myitem,
fileList);
myListView.setAdapter(adapter);
myEditText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(event.getAction()==KeyEvent.ACTION_DOWN)
if((keyCode==KeyEvent.KEYCODE_DPAD_CENTER)||(keyCode==KeyEvent.KEYCODE_ENTER)) {
Book b = new Book();
b.setName(myEditText.getText().toString());
b.setYear("2009");
fileList.add(0,b);
adapter.notifyDataSetChanged();
myEditText.setText("");
return true;
}
return false;
}
});
}
}
Book.java
package com.android.simonnear.mytest;
/**
* Created by Simonnear on 2015/9/25.
*/
public class Book {
private String Name,Year;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getYear() {
return Year;
}
public void setYear(String year) {
Year = year;
}
}
TestAdapter.java
package com.android.simonnear.mytest; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.List; /** * Created by Simonnear on 2015/9/25. */ public class TestAdapter extends ArrayAdapter<Book> { private int resource; public TestAdapter(Context context, int resourceId, List<Book> objects) { super(context, resourceId, objects); // 记录下来稍后使用 resource = resourceId; } public View getView(int position, View convertView, ViewGroup parent) { LinearLayout imageListView; // 获取数据 Book b = getItem(position); String name = b.getName(); String year = b.getYear(); if(convertView == null) { imageListView = new LinearLayout(getContext()); LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(resource, imageListView, true);//把image_item.xml布局解析到LinearLayout里面 } else { imageListView = (LinearLayout)convertView; } // 获取控件,填充数据 ImageView imageView = (ImageView) imageListView.findViewById(R.id.item_thumbnail); TextView textView = (TextView) imageListView.findViewById(R.id.item_file_name); TextView textView2 = (TextView) imageListView.findViewById(R.id.textView2); textView.setText(name); textView2.setText(year); imageView.setBackgroundResource(R.mipmap.ic_launcher); return imageListView; } }