我的活动中有自定义适配器类的构造函数:
CustomAdapter cAdapt = new CustomAdapter(this,
android.R.layout.simple_list_item_1, newlist);
目前,“新列表”是ArrayList<String>
。它用于在我的自定义适配器中设置TextView
,其中包含为列表中的每个项目保存的数据。问题是,ListView
中的每个项目都包含三个TextView
和一个ImageView
。
如何封装所有5个对象的数据,然后将其传递给我的构造函数?
答案 0 :(得分:2)
这里你应该摆脱的第一件事是android.R.layout.simple_list_item_1
它不会给你每行多个TextView。
问题是我的ListView中的每个项目都包含三个TextView和一个 ImageView的。
您应该设计自己的行布局。
以下代码段将为您提供帮助。
<强> row.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp" >
<ImageView
android:id="@+id/logo"
android:layout_width="50px"
android:layout_height="50px"
android:layout_marginLeft="5px"
android:layout_marginRight="20px"
android:layout_marginTop="5px"
android:src="@drawable/windowsmobile_logo" >
</ImageView>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@+id/label"
android:textSize="30px" >
</TextView>
</LinearLayout>
<强> MobileArrayAdapter.java 强>
package com.mkyong.android.adaptor;
import com.mkyong.android.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MobileArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MobileArrayAdapter(Context context, String[] values) {
super(context, R.layout.list_mobile, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_mobile, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
textView.setText(values[position]);
// Change icon based on name
String s = values[position];
System.out.println(s);
if (s.equals("WindowsMobile")) {
imageView.setImageResource(R.drawable.windowsmobile_logo);
} else if (s.equals("iOS")) {
imageView.setImageResource(R.drawable.ios_logo);
} else if (s.equals("Blackberry")) {
imageView.setImageResource(R.drawable.blackberry_logo);
} else {
imageView.setImageResource(R.drawable.android_logo);
}
return rowView;
}
}
<强> MainActivity.java 强>
package com.mkyong.android;
import com.mkyong.android.adaptor.MobileArrayAdapter;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.Toast;
import android.view.View;
public class MainActivity extends ListActivity {
static final String[] MOBILE_OS =
new String[] { "Android", "iOS", "WindowsMobile", "Blackberry"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new MobileArrayAdapter(this, MOBILE_OS));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//get selected items
String selectedValue = (String) getListAdapter().getItem(position);
Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show();
}
}
投入时间阅读。
http://www.mkyong.com/android/android-listview-example/
How do I encapsulate the data for all 5 objects then pass it into my constructor?
你可以做的是用setter getter方法创建模型类。并在arraylist中传递class对象。
答案 1 :(得分:1)
您可以使用BaseAdapter并创建自定义列表视图。 您必须创建包含文本视图和图像的custom_list.xml文件。
itemlist.setAdapter(new MyCustomBaseAdapter(this));
像这样创建类
static class ViewHolder {
TextView txtTitle;
TextView txtDescription;
TextView txtDate;
}
public class MyCustomBaseAdapter extends BaseAdapter {
// private static ArrayList<SearchResults> searchArrayList;
private LayoutInflater mInflater;
public MyCustomBaseAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return arrayRSS.size();
}
public Object getItem(int position) {
return arrayRSS.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_list, null);
holder = new ViewHolder();
holder.txtTitle = (TextView) convertView
.findViewById(R.id.title);
holder.txtDescription = (TextView) convertView
.findViewById(R.id.description);
holder.txtDate = (TextView) convertView.findViewById(R.id.date);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtTitle.setText(arrayRSS.get(position).getTitle());
holder.txtDescription.setText(arrayRSS.get(position)
.getDescription());
holder.txtDate.setText(arrayRSS.get(position).getPubdate());
return convertView;
}
}
答案 2 :(得分:0)
您可以创建一个对象ItemInfo
,并使用getter和setter包含五个数据字段中的每一个。然后创建一个ArrayList<ItemInfo>
,并将其传递给您的适配器并从那里处理它。
答案 3 :(得分:0)
您可以将arraylist传递为
ArrayList<ArrayList<Object>> arraylist=new ArraList<ArrayList<Object>>
其中ArrayList包含三个textview和一个imageview的数据..