在Android应用中常用到类似下面的界面

在这个界面中,每一行的布局都一样,只是填充的内容不同,针对这种方式的应用,我们可以使用ListView.
要使用ListView,首先我们要为该ListView的每个Item定义一个布局文件:
res/layout/item.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:orientation="horizontal" > <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:id="@+id/name_view" android:paddingTop="6dp" android:paddingBottom="6dp" /> <TextView android:layout_width="110dp" android:layout_height="wrap_content" android:id="@+id/email_view" android:paddingTop="6dp" android:paddingBottom="6dp" /> <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:id="@+id/account_view" android:paddingTop="6dp" android:paddingBottom="6dp" /> </LinearLayout>
主界面: res/layout/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:orientation="vertical" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:paddingTop="6dp" android:paddingBottom="6dp" android:text="@string/name_label" /> <TextView android:layout_width="110dp" android:layout_height="wrap_content" android:paddingTop="6dp" android:paddingBottom="6dp" android:text="@string/email_label" /> <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:paddingTop="6dp" android:paddingBottom="6dp" android:text="@string/account_label" /> </LinearLayout> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView" /> </LinearLayout>
在使用ListView或网格布局时要用到适配器,达到在ListView的每个Item中填充数据的效果,下面举了三种适配器: SimpleAdapt, SimpleCursorAdapter和自定义适配器
package com.lk.sqlite; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.lk.adapter.CustomAdapter; import com.lk.model.User; import com.lk.service.UserService; import com.lk.util.SQLHelper; import android.os.Bundle; import android.app.Activity; import android.database.Cursor; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.SimpleCursorAdapter; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; private UserService userService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); userService = new UserService(); SQLHelper sqlHelper = new SQLHelper(getApplicationContext(), 1); userService.setSqlHelper(sqlHelper ); listView = (ListView) findViewById(R.id.listView); // showUserListWithSimpleAdapt(); showUserListWithSimpleCursorAdapter(); // showUserListWithCustomAdapter(); //当点击ListView中每个条目时触发的事件 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListView parentView = (ListView) parent; //第三种方式: 自定义Adapter // User user = (User) parentView.getItemAtPosition(position); //第二种方式: CursorAdapter Cursor cursor = (Cursor) parentView.getItemAtPosition(position); User user = new User(); user.setId(cursor.getInt(cursor.getColumnIndex("_id"))); user.setName(cursor.getString(cursor.getColumnIndex("name"))); user.setEmail(cursor.getString(cursor.getColumnIndex("email"))); user.setAccount(cursor.getDouble(cursor.getColumnIndex("account"))); Toast.makeText(getApplicationContext(), user.getName() + ":" + user.getId(), Toast.LENGTH_SHORT).show(); } }); } private void showUserListWithCustomAdapter() { List<User> users = userService.findUserByPage(0, 15); CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), users, R.layout.item); listView.setAdapter(customAdapter); } private void showUserListWithSimpleCursorAdapter() { Cursor cursor = userService.findUserCursorByPagation(0, 15); //使用SimpleCursorAdapter适配器时,返回结果一定要包含"_id"字段。 SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.item, cursor, new String[]{"name", "email", "account"}, new int[]{R.id.name_view, R.id.email_view, R.id.account_view}); listView.setAdapter(simpleCursorAdapter); } private void showUserListWithSimpleAdapt() { List<User> users = userService.findUserByPage(0, 15); List<Map<String, Object>> data = new ArrayList<Map<String,Object>>(); for(User user: users) { Map<String, Object> map = new HashMap<String, Object>(); map.put("id", user.getId()); map.put("name", user.getName()); map.put("email", user.getEmail()); map.put("account", user.getAccount()); data.add(map); } SimpleAdapter simpleAdapter = new SimpleAdapter(getApplicationContext(), data , R.layout.item, new String[]{"name", "email", "account"}, new int[]{R.id.name_view, R.id.email_view, R.id.account_view}); listView.setAdapter(simpleAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
自定义适配器:
package com.lk.adapter; import java.util.List; import com.lk.model.User; import com.lk.sqlite.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class CustomAdapter extends BaseAdapter { private List<User> users; //布局填充器 private LayoutInflater layoutInflater; private int resource; public CustomAdapter() { super(); } public CustomAdapter(Context context, List<User> users, int resource) { super(); this.users = users; this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.resource = resource; } @Override public int getCount() { return this.users.size(); } @Override public Object getItem(int position) { return this.users.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //这里每次都根据id获取View比较好性能,我们可以采用缓存 TextView nameView = null; TextView emailView = null; TextView accountView = null; //convertView是一个view的缓存,当listView在第一面时缓存为空,否则缓存不为空 if(convertView == null) { convertView = layoutInflater.inflate(resource, null); ViewCache.nameView = (TextView) convertView.findViewById(R.id.name_view); ViewCache.emailView = (TextView) convertView.findViewById(R.id.email_view); ViewCache.accountView = (TextView) convertView.findViewById(R.id.account_view); } nameView = ViewCache.nameView; emailView = ViewCache.emailView; accountView = ViewCache.accountView; User user = users.get(position); nameView.setText(user.getName()); emailView.setText(user.getEmail()); accountView.setText(String.valueOf(user.getAccount())); return convertView; } final static class ViewCache { public static TextView nameView = null; public static TextView emailView = null; public static TextView accountView = null; } }
浙公网安备 33010602011771号