我现在在ListActivity中有一个非常简单的ListView,它只显示文本值列表。这是我目前的代码:
public class InfoActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
List<String> values = new ArrayList<String>();
// loads up the values array here
// ...
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
我的InfoActivity XML文件中没有任何内容,因为我使用的是ListActivity。
我想要做的是为行创建自定义布局。前5行将具有layoutA.xml,后5行将具有layoutB.xml。
我该怎么做?我迷失在哪里开始。显然我正在寻找最简单的代码。
答案 0 :(得分:2)
答案 1 :(得分:2)
这很简单,您只需要扩展ArrayAdapter。我的ArrayAdapter做了两件事:
这是一个微不足道的例子。如果你打算让它比前半部分更复杂,而后半部分不同,那么你应该覆盖getViewTypeCount()和getItemViewType()。
工作示例:
public class Example extends Activity {
public class MyArrayAdapter<T> extends ArrayAdapter<T> {
LayoutInflater mInflater;
int[] mLayoutResourceIds;
public MyArrayAdapter(Context context, int[] textViewResourceId, List<T> objects) {
super(context, textViewResourceId[0], objects);
mInflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
mLayoutResourceIds = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null && position > 2)
convertView = mInflater.inflate(mLayoutResourceIds[1], parent, false);
return super.getView(position, convertView, parent);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] array = new String[] {"one", "two", "three", "four", "five", "six"};
List<String> list = new ArrayList<String>();
Collections.addAll(list, array);
ListView listView = new ListView(this);
listView.setAdapter(new MyArrayAdapter<String>(this, new int[] {android.R.layout.simple_list_item_1, android.R.layout.simple_list_item_single_choice}, list));
setContentView(listView);
}
}
答案 2 :(得分:0)
我相信如果你有一个计数器,比如从0开始,然后通过layoutA.xml
膨胀并重复使用前五个,那么当它在5时,用{{1}废弃膨胀的layoutA.xml
}。这应该很简单。当然,我正在通过layoutB.xml
来讨论这个问题,它允许您创建一个适配器来设置BaseAdapter
中的每一行。我从未真正使用ListView
。但这个过程应该是一样的。
只是添加@lxx发布的内容,我的意思是链接,它肯定会帮助你弄清楚如何完成你想要的。虽然我会说在我看来,当你想要一种5种而另外5种时,使用这些方法可能有些过分。绝对使用该链接作为一个良好的基线,但只需使用一个计数器。它更简单。在内存方面,只有当您知道计数器已经放入5个视图时才重新膨胀布局。这样你就不会每次都这样做。
答案 3 :(得分:0)
您可以尝试使用MergeAdapter(cwac-merge),在一个ListView中,您可以拥有多个具有不同布局的适配器。
答案 4 :(得分:0)
如果我们需要在列表视图中显示不同类型的视图,那么在适配器中使用getViewTypeCount()和getItemViewType()而不是切换视图VIEW.GONE和VIEW.VISIBLE在getView中可能是非常昂贵的任务。 )这将影响列表滚动。
请在适配器中检查此内容以使用getViewTypeCount()和getItemViewType()。