我的应用创建了一个ListView,它根据数组中的字符串数创建列表项。但是,我希望每个Spinner项目都选择了相应的项目。
实施例:
String[] items = {"item1", "item2", "item3"}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] items = {"item1", "item2", "item3"}
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
ListView listView = (ListView) findViewById(R.id.requestItems_listView);
listView.setAdapter(new CustomAdapter(this));
}
private class CustomAdapter extends BaseAdapter {
LayoutInflater inflater;
public CustomAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
public int getCount() {
// TODO Auto-generated method stub
return items.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int arg0, View convertview, ViewGroup arg2) {
ViewHolder viewHolder;
if (convertview == null) {
convertview = inflater.inflate(R.layout.request_item_list_item, null);
viewHolder = new ViewHolder();
viewHolder.spinner = (Spinner) convertview.findViewById(R.id.itemSpinner);
viewHolder.spinner.setAdapter(adapter);
convertview.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertview.getTag();
}
return convertview;
}
public class ViewHolder {
Spinner spinner;
}
}
}
所以这应该创建3(因为String []&#34; item&#34;)中有3个项目&#34; request_item_list_item&#34; ListView中的项目。
它的每个微调器(request_item_list_item的1个部分)位于0位置:
&#34; ITEM1&#34;
&#34; ITEM1&#34;
&#34; ITEM1&#34;
我希望它能够做到以下几点:
&#34; ITEM1&#34;
&#34; ITEM2&#34;
&#34;项目3&#34;
这可以在CustomAdapter中完成吗?
奖金问题: 如果我希望用户能够按下&#34;添加按钮&#34;将列表项的数量增加1(这样会有4个request_item_list_items,5,6等)是否有我应该使用的.add方法?或者我只是更改getCount并刷新列表(这不是理想的...如果用户已经填写了request_item_list_items中的信息,那么它们会在刷新时丢失所有输入)?
答案 0 :(得分:1)
对于第一个问题,您只需要像这样更改getView
:(如I_A_Mok
所述)
public View getView(int arg0, View convertview, ViewGroup arg2) {
ViewHolder viewHolder;
if (convertview == null) {
convertview = inflater.inflate(R.layout.request_item_list_item, null);
viewHolder = new ViewHolder();
viewHolder.spinner = (Spinner) convertview.findViewById(R.id.itemSpinner);
viewHolder.spinner.setAdapter(adapter);
convertview.setTag(viewHolder);
viewHolder.spinner.setSelection(arg0);
} else {
viewHolder = (ViewHolder) convertview.getTag();
}
return convertview;
}
和第二个问题:
CustomAdapter myAdapter;
ArrayList<String> items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
items = new ArrayList<>();
items.add("item1");
items.add("item2");
items.add("item3");
ListView listView = (ListView) findViewById(R.id.requestItems_listView);
myAdapter = new CustomAdapter(this, items);
listView.setAdapter(myAdapter);
Button bt_add_new = (Button)findViewById(R.id.bt_add_new);
bt_add_new.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
items.add("item" + items.size() + 1);
myAdapter.setItems(items);
myAdapter.notifyDataSetChanged();
}
});
}
private class CustomAdapter extends BaseAdapter {
LayoutInflater inflater;
private ArrayList<String> items;
public CustomAdapter(Context context, ArrayList<String> items) {
inflater = LayoutInflater.from(context);
this.items = items;
}
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int arg0, View convertview, ViewGroup arg2) {
ViewHolder viewHolder;
convertview = inflater.inflate(R.layout.request_item_list_item, null);
viewHolder = new ViewHolder();
viewHolder.spinner = (Spinner) convertview.findViewById(R.id.itemSpinner);
ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
viewHolder.spinner.setAdapter(adapter);
convertview.setTag(viewHolder);
return convertview;
}
public ArrayList<String> getItems() {
return items;
}
public void setItems(ArrayList<String> items) {
this.items = items;
}
public class ViewHolder {
Spinner spinner;
}
}