我不清楚Android Studio中的Listview适配器的详细信息。
我已经看到了许多使用它们的示例,但是从来没有想过使用它们的方式。
我正在尝试使用数组中相同类的对象的参数填充Listview。
我有一个对象数组,其中包含2个String参数和1个Localtime参数。
到目前为止,我仅看到了一些示例,其中它们赋予适配器的每个不同值都是单独的数组的一部分。
我想做的是给适配器3个来自同一数组的对象的不同参数。
这可能吗?
我认为有可能,但是我不确定该怎么做。
示例:
public class MainActivity extends AppCompatActivity {
ListView myListView;
String[] items;
String[] prices;
String[] descriptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources res = getResources();
myListView = (ListView) findViewById(R.id.myListView);
items = res.getStringArray(R.array.items);
prices = res.getStringArray(R.array.prices);
descriptions = res.getStringArray(R.array.descriptions);
ItemAdapter itemAdapter = new ItemAdapter(this, items, prices,
descriptions);
myListView.setAdapter(itemAdapter);
这里,项目,价格和描述被声明为字符串数组,并在资源中实例化为3个字符串数组。稍后,它们在Adapter类的构造函数中被引用。
相反,我希望它们指向的不是数组,而是指向单个数组中同一类对象的参数。
或者,如果不可能的话,我可以从数组中获取所有对象的参数,并为每个对象创建一个单独的数组,但是我觉得那是不必要的,并且必须有一种简单的方法来做到这一点,但是我只是不知道该怎么做。
编辑: 我在youtube上发现了一个名为“ Android初学者教程#8-用于显示多列的自定义ListView适配器”的教程视频,该视频正是我想要的。
答案 0 :(得分:0)
您应该尝试使用BaseAdapter。
import android.widget.ListAdapter;
public class ListAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<Object> list;
private Context context;
ListAdapter(ArrayList<Object> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int pos) {
return list.get(pos);
}
@Override
public long getItemId(int pos) {
return 0L;
//just return 0 if your list items do not have an Id variable.
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
return view;
}
}
并将其称为“活动”
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<Object> myList= new ArrayList<>();
//here you can add elements of type Object to your ListAdapter
//instantiate custom adapter
ListAdapter adapter = new ListAdapter(myList, this);
//handle listview and assign adapter
ListView lView = findViewById(android.R.id.list);
lView.setAdapter(adapter);
}
}
答案 1 :(得分:0)
您需要将这些数组包装在单个模型类下,例如Product
class Product {
private String item;
private String description;
private int price;
public Product(String item, String description, int price)
{
this.item = item;
this.description = description;
this.price = price;
}
//getter setter here
}
然后在您的活动中
public class MainActivity extends AppCompatActivity {
ListView myListView;
String[] items;
String[] prices;
String[] descriptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources res = getResources();
myListView = (ListView) findViewById(R.id.myListView);
items = res.getStringArray(R.array.items);
prices = res.getStringArray(R.array.prices);
descriptions = res.getStringArray(R.array.descriptions);
ArrayList<Product> productList = new ArrayList<>();
for(int i=0; i<item.lenght; i++)
productList.add( new Product(items[i],descriptions[i],Integer.parseInt( prices[i] ) );
ItemAdapter itemAdapter = new ItemAdapter(this, productList);
myListView.setAdapter(itemAdapter);
}
}
您需要将ArrayAdapter
扩展为getView()
,这样{p}
class itemAdapter extends ArrayAdapter<Product>
{
@Override
public view getView(final int position, View convertView, ViewGroup parent)
{
View view = inflateLayout(layout xml here);
Product product = getItem(position);
TextView view = (TextView) view.findViewById(id here);
TextView.setText(product.getItem());
.
.
.
.
return view
}
}