我有多个TextView
my 中的每个列表项ListView
。我学会了写一个正确的getView
我相信的方法,但我不知道如何使用setAdapter
调用该方法。
private static String[] project = {"proj1","proj2"};
private static String[] workRequests = {"requirement gathering", "design"};
private static String[] startDate = {"02/21/2012","07/15/2011"};
private static String[] status = {"WIP","DONE"};
ListView mListView;
public class MyDashboardActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mydashboard);
final LayoutInflater mInflater = LayoutInflater.from(this);
mListView = (ListView)findViewById(R.id.dashboardList);
mListView.setAdapter(
// How do I set the adapter?
);
}
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("enters");
if(convertView == null){
convertView = LayoutInflater.from(this).inflate(R.layout.mydashboard,null);
}
((TextView) convertView.findViewById(R.id.project)).setText(project[position]);
((TextView) convertView.findViewById(R.id.work_request)).setText(workRequests[position]);
((TextView) convertView.findViewById(R.id.start_date)).setText(startDate[position]);
((TextView) convertView.findViewById(R.id.status)).setText(status[position]);
return convertView;
}
这是 xml 布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/home_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- Include Action Bar -->
<include layout="@layout/actionbar_layout" />
<ListView
android:id="@+id/dashboardList"
style="@style/LeftHeaderText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:background="@drawable/innerdashboard_bg"
android:textColor="@color/textColor" >
<TextView android:id="@+id/project" />
<TextView android:id="@+id/work_request" />
<TextView android:id="@+id/start_date" />
<TextView android:id="@+id/status" />
</ListView>
</LinearLayout>
我尝试了几种方法,但没有一个有效。有人可以建议在这种情况下如何设置适配器吗?谢谢!
您需要实现自己的适配器。我的方法是还定义一个“代表”视图的对象。
下面有一个非常简单的例子,有两个TextViews
以满足您的需求。
代表视图的对象(ListView 中的一行):
public class CustomObject {
private String prop1;
private String prop2;
public CustomObject(String prop1, String prop2) {
this.prop1 = prop1;
this.prop2 = prop2;
}
public String getProp1() {
return prop1;
}
public String getProp2() {
return prop2;
}
}
接下来是自定义适配器:
public class CustomAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<CustomObject> objects;
private class ViewHolder {
TextView textView1;
TextView textView2;
}
public CustomAdapter(Context context, ArrayList<CustomObject> objects) {
inflater = LayoutInflater.from(context);
this.objects = objects;
}
public int getCount() {
return objects.size();
}
public CustomObject getItem(int position) {
return objects.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.your_view_layout, null);
holder.textView1 = (TextView) convertView.findViewById(R.id.id_textView1);
holder.textView2 = (TextView) convertView.findViewById(R.id.list_id_textView2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView1.setText(objects.get(position).getprop1());
holder.textView2.setText(objects.get(position).getprop2());
return convertView;
}
}
现在您可以在活动中定义和设置适配器:
ArrayList<CustomObject> objects = new ArrayList<CustomObject>();
CustomAdapter customAdapter = new CustomAdapter(this, objects);
listView.setAdapter(customAdapter);
现在您只需在对象列表中管理您的 CustomObject。
不要忘记调用customAdapter.notifyDataSetChanged()
当您想要在 ListView 上重新进行修改时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)