加入不同类型的项目的列表视图的 [英] Adding different types of items a list view
问题描述
有一个很好的教程或链接,显示如何不同的项目添加到列表视图?
例如,一拖二的文本行和复选框,另外您刚刚preSS和和东西会弹出。所有我现在已经是每一个列表项是相同的两行文本视图和复选框...
或,如果通过 R.layout.xxx方式来增加1排在了不同的布局时间
?
公开查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
mRoot = inflater.inflate(R.layout.frag_settings,集装箱,假);
mItems = getResources()getStringArray(R.array.setting_items)。
mItemDescription = getResources()getStringArray(R.array.setting_item_descriptions)。
mItemListView =(ListView控件)mRoot.findViewById(R.id.lvMainListView);
ArrayAdapter<字符串> lvRowTitle =新的ArrayAdapter<字符串>(getActivity()
R.layout.setting_twolinetext_checkbox,R.id.tvRowTitle,
mItems);
mItemListView.setAdapter(lvRowTitle);
ArrayAdapter<字符串> lvRowDesc =新的ArrayAdapter<字符串>(getActivity()
R.layout.setting_twolinetext_checkbox,R.id.tvRowDesc,
mItemDescription);
mItemListView.setAdapter(lvRowDesc);
返回mRoot;
在我的例子中,列表的活动,将展示我们的自定义列表视图称为OptionsActivity,因为在我的项目本次活动将会显示不同的选择我的用户可以设置来控制我的应用程序。有两个列表项的类型,一个列表项类型只是有一个TextView和第二个列表项类型只是有一个按钮。你可以把任何你喜欢的每个项目类型里面的小部件,但我一直在这个例子中的简单。
在 getItemView 的方法检查,看看哪些列表项应该是1型还是2。根据我的定义我往上顶,前5个列表项将列表项的类型1的静态整数,和过去5列表项目将列表项的类型2.所以,如果你编译并运行它,你将有一个ListView具有该只包含一个按钮,只包含一个TextView五个项目,然后五个项目。
下面是活动code中,活动xml文件,并为每个列表项类型的XML文件。
OptionsActivity.java:
公共类OptionsActivity扩展ListActivity {
私有静态最终诠释LIST_ITEM_TYPE_1 = 0;
私有静态最终诠释LIST_ITEM_TYPE_2 = 1;
私有静态最终诠释LIST_ITEM_TYPE_COUNT = 2;
私有静态最终诠释LIST_ITEM_COUNT = 10;
//前五个列表项将列表项类型1
//最后五会列表项的类型2
私有静态最终诠释LIST_ITEM_TYPE_1_COUNT = 5;
私人MyCustomAdapter mAdapter;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
mAdapter =新MyCustomAdapter();
的for(int i = 0; I< LIST_ITEM_COUNT;我++){
如果(ⅰ&其中; LIST_ITEM_TYPE_1_COUNT)
mAdapter.addItem(项类型1);
其他
mAdapter.addItem(项目型);
}
setListAdapter(mAdapter);
}
私有类MyCustomAdapter扩展了BaseAdapter {
私人的ArrayList<字符串> MDATA =新的ArrayList<字符串>();
私人LayoutInflater mInflater;
公共MyCustomAdapter(){
mInflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
公共无效的addItem(最后弦乐项目){
mData.add(项目);
notifyDataSetChanged();
}
@覆盖
公众诠释getItemViewType(INT位置){
如果(位置< LIST_ITEM_TYPE_1_COUNT)
返回LIST_ITEM_TYPE_1;
其他
返回LIST_ITEM_TYPE_2;
}
@覆盖
公众诠释getViewTypeCount(){
返回LIST_ITEM_TYPE_COUNT;
}
@覆盖
公众诠释getCount将(){
返回mData.size();
}
@覆盖
公共字符串的getItem(INT位置){
返回mData.get(位置);
}
@覆盖
众长getItemId(INT位置){
返回的位置;
}
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
ViewHolder支架=无效;
整型= getItemViewType(位置);
如果(convertView == NULL){
持有人=新ViewHolder();
开关(类型){
案例LIST_ITEM_TYPE_1:
convertView = mInflater.inflate(R.layout.list_item_type1,NULL);
holder.textView =(TextView中)convertView.findViewById(R.id.list_item_type1_text_view);
打破;
案例LIST_ITEM_TYPE_2:
convertView = mInflater.inflate(R.layout.list_item_type2,NULL);
holder.textView =(TextView中)convertView.findViewById(R.id.list_item_type2_button);
打破;
}
convertView.setTag(保持器);
} 其他 {
支架=(ViewHolder)convertView.getTag();
}
holder.textView.setText(mData.get(位置));
返回convertView;
}
}
公共静态类ViewHolder {
公众的TextView TextView的;
}
}
activity_options.xml:
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools
机器人:ID =@ + ID /容器
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:方向=垂直
>
<的ListView
机器人:ID =@ + ID / optionsList
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT>
< / ListView控件>
< / LinearLayout中>
list_item_type_1.xml:
< XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout
的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:ID =@ + ID / list_item_type1_layout
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:方向=垂直>
<的TextView
机器人:ID =@ + ID / list_item_type1_text_view
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:文本=文本到这里/>
< / LinearLayout中>
list_item_type2.xml:
< XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout
的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:ID =@ + ID / list_item_type2_layout
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:方向=垂直>
<按钮
机器人:ID =@ + ID / list_item_type2_button
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:文本=按钮文字放在这里/>
< / LinearLayout中>
Is there a good tutorial or link that shows how to add different items to a listview?
For example, one with two Text lines and a Check box, another that you just press and and something would pop up. All I have now is every list item is the same two line text view and checkbox...
Or, if there is a way to add 1 row at a time with a different layout through R.layout.xxx
?
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mRoot = inflater.inflate(R.layout.frag_settings, container, false);
mItems = getResources().getStringArray(R.array.setting_items);
mItemDescription = getResources().getStringArray(R.array.setting_item_descriptions);
mItemListView = (ListView) mRoot.findViewById(R.id.lvMainListView);
ArrayAdapter<String> lvRowTitle = new ArrayAdapter<String>(getActivity(),
R.layout.setting_twolinetext_checkbox, R.id.tvRowTitle,
mItems);
mItemListView.setAdapter(lvRowTitle);
ArrayAdapter<String> lvRowDesc = new ArrayAdapter<String>(getActivity(),
R.layout.setting_twolinetext_checkbox, R.id.tvRowDesc,
mItemDescription);
mItemListView.setAdapter(lvRowDesc);
return mRoot;
In my example, the list activity that will display our custom list view is called OptionsActivity, because in my project this activity is going to display the different options my user can set to control my app. There are two list item types, one list item type just has a TextView and the second list item type just has a Button. You can put any widgets you like inside each list item type, but I kept this example simple.
The getItemView method checks to see which list items should be type 1 or type 2. According to my static ints I defined up top, the first 5 list items will be list item type 1, and the last 5 list items will be list item type 2. So if you compile and run this, you will have a ListView that has five items that just contain a button, and then five items that just contain a TextView.
Below is the activity code, the activity xml file, and an xml file for each list item type.
OptionsActivity.java:
public class OptionsActivity extends ListActivity {
private static final int LIST_ITEM_TYPE_1 = 0;
private static final int LIST_ITEM_TYPE_2 = 1;
private static final int LIST_ITEM_TYPE_COUNT = 2;
private static final int LIST_ITEM_COUNT = 10;
// The first five list items will be list item type 1
// and the last five will be list item type 2
private static final int LIST_ITEM_TYPE_1_COUNT = 5;
private MyCustomAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdapter = new MyCustomAdapter();
for (int i = 0; i < LIST_ITEM_COUNT; i++) {
if (i < LIST_ITEM_TYPE_1_COUNT)
mAdapter.addItem("item type 1");
else
mAdapter.addItem("item type 2");
}
setListAdapter(mAdapter);
}
private class MyCustomAdapter extends BaseAdapter {
private ArrayList<String> mData = new ArrayList<String>();
private LayoutInflater mInflater;
public MyCustomAdapter() {
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(final String item) {
mData.add(item);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if(position < LIST_ITEM_TYPE_1_COUNT)
return LIST_ITEM_TYPE_1;
else
return LIST_ITEM_TYPE_2;
}
@Override
public int getViewTypeCount() {
return LIST_ITEM_TYPE_COUNT;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch(type) {
case LIST_ITEM_TYPE_1:
convertView = mInflater.inflate(R.layout.list_item_type1, null);
holder.textView = (TextView)convertView.findViewById(R.id.list_item_type1_text_view);
break;
case LIST_ITEM_TYPE_2:
convertView = mInflater.inflate(R.layout.list_item_type2, null);
holder.textView = (TextView)convertView.findViewById(R.id.list_item_type2_button);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(mData.get(position));
return convertView;
}
}
public static class ViewHolder {
public TextView textView;
}
}
activity_options.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ListView
android:id="@+id/optionsList"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
list_item_type_1.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_type1_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/list_item_type1_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text goes here" />
</LinearLayout>
list_item_type2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_type2_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/list_item_type2_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button text goes here" />
</LinearLayout>
这篇关于加入不同类型的项目的列表视图的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!