通过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; } }