Android 如何向listview添加额外的自定义行?
正如标题所示,我正试图在列表视图中添加一个额外的自定义行,以允许更多的自定义。我目前在列表视图中设置了一个自定义行,我们知道它将根据输入的信息量不断重复。现在,我想扩展列表视图以显示多个自定义行,我一直在调整代码,如果有人能看一下,我将不胜感激 我已经解释了我当前的设置 首先,我们有一个视图持有者本身,它作为设置信息的中间人Android 如何向listview添加额外的自定义行?,android,list,listview,Android,List,Listview,正如标题所示,我正试图在列表视图中添加一个额外的自定义行,以允许更多的自定义。我目前在列表视图中设置了一个自定义行,我们知道它将根据输入的信息量不断重复。现在,我想扩展列表视图以显示多个自定义行,我一直在调整代码,如果有人能看一下,我将不胜感激 我已经解释了我当前的设置 首先,我们有一个视图持有者本身,它作为设置信息的中间人 public class ViewHolderWine { public ImageView wineImage; public TextView wineName; p
public class ViewHolderWine {
public ImageView wineImage;
public TextView wineName;
public TextView wineDes;
public TextView winePrice;
public void setDataIntoViewHolder (List_String listString ){
wineImage.setImageResource(listString.getIcon_wine());
wineName.setText(listString.getWineName());
wineDes.setText(listString.getWinedes());
winePrice.setText(listString.getWinePrices());
}
其次,我们有我的列表字符串,其中有getter和setter
public class List_String {
int icon_wine;
String wineName;
String winedes;
String winePrices;
public List_String(int icon_wine, String wineName, String winedes, String winePrices) {
this.icon_wine = icon_wine;
this.wineName = wineName;
this.winedes = winedes;
this.winePrices = winePrices;
}
public String getWinePrices() {
return winePrices;
}
public void setWinePrices(String winePrices) {
this.winePrices = winePrices;
}
etc......
接下来是列表片段
public class List extends ListFragment {
java.util.List<List_String> lst;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
listData();
// Adapter custom;
Adapter myAdapter = new Adapter(getActivity(), R.layout.custom_list, lst);
setListAdapter(myAdapter);
return super.onCreateView(inflater, container, savedInstanceState);
}
public void listData() {
lst = new ArrayList<List_String>();
lst.add(new List_String(R.drawable.thumb, etc....
公共类列表扩展了ListFragment{
java.util.List lst;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
listData();
//适配器定制;
Adapter myAdapter=新适配器(getActivity(),R.layout.custom_list,lst);
setListAdapter(myAdapter);
返回super.onCreateView(充气机、容器、savedInstanceState);
}
public void listData(){
lst=新的ArrayList();
添加(新列表)字符串(R.drawable.thumb等)。。。。
最后,我用一个适配器把所有的部件组装在一起
public class Adapter extends ArrayAdapter<List_String> {
List<List_String> lstWine;
LayoutInflater inflater;
public Adapter(Context context, int resource, java.util.List<List_String> objects) {
super(context, resource, objects);
lstWine = objects;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolderWine viewholder;
if (view == null){
viewholder = new ViewHolderWine();
view = inflater.inflate(R.layout.custom_list, null);
viewholder.wineImage = (ImageView) view.findViewById(R.id.wineImage);
viewholder.wineName = (TextView) view.findViewById(R.id.wineName);
viewholder.wineDes = (TextView) view.findViewById(R.id.wineDes);
viewholder.winePrice = (TextView) view.findViewById(R.id.winePrice);
view.setTag(viewholder);
}else{
viewholder = (ViewHolderWine) view.getTag();
}
List_String list = lstWine.get(position);
viewholder.setDataIntoViewHolder(list);
return view;
}
公共类适配器扩展了ArrayAdapter{
葡萄酒清单;
充气机;
公共适配器(上下文、int资源、java.util.List对象){
超级(上下文、资源、对象);
lstWine=对象;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
视窗夹线视窗夹;
如果(视图==null){
viewholder=新ViewHolderWine();
视图=充气机。充气(R.layout.custom_列表,空);
viewholder.wineImage=(ImageView)view.findviewbyd(R.id.wineImage);
viewholder.wineName=(TextView)view.findViewById(R.id.wineName);
viewholder.wineDes=(TextView)view.findViewById(R.id.wineDes);
viewholder.winePrice=(TextView)view.findViewById(R.id.winePrice);
view.setTag(viewholder);
}否则{
viewholder=(ViewHolderWine)view.getTag();
}
List_String List=lstWine.get(位置);
viewholder.setDataIntoViewHolder(列表);
返回视图;
}
承载列表视图的活动的布局如下所示
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
<ListView
android:id="@+id/list2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
你想制作一个可扩展的列表吗?或者你只是想让一些底部的行具有不同的外观?基本上,一些行与上面的行具有不同的外观,以便我可以混合和匹配。它们是否包含相同类型的数据?例如,我的第一个自定义行使用3个文本视图和1个图像视图。我正在考虑使用一个带有文本视图和开关的行。B但是,一旦我知道如何添加一个额外的自定义行,我希望我可以从那里获取它。因为您有不同类型的数据,所以需要创建不同的适配器,这意味着您将有一个单独的列表视图,可以放在另一行的底部
//populate your first list
myList.add(0, new Model("Full name 1", "Good"));
myList.add(1, new Model("Full name 2", "Bad"));
myList.add(2, new Model("Full name 3", "Worse"));
myList.add(3, new Model("Full name 4", "Mediocre"));
//populate your second list
myList2.add(0, new Model2("Full name 5", true));
myList2.add(1, new Model2("Full name 6", true));
myList2.add(2, new Model2("Full name 7", false));
//initialize adapters
adapter = new mAdapter(StartActivity.this,myList);
adapter2 = new mAdapter2(StartActivity.this,myList2);
//retrieve the list views
lv= (ListView) findViewById(R.id.list);
lv2= (ListView) findViewById(R.id.list2);
//set the adapters
lv.setAdapter(adapter);
lv2.setAdapter(adapter2);