更改CustomAdapter创建的微调器上的文本(扩展BaseAdapter)

时间:2016-10-01 01:02:39

标签: android listview listitem

我的应用创建了一个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中的信息,那么它们会在刷新时丢失所有输入)?

1 个答案:

答案 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;
    }
}