自定义微调没有隐瞒选择后的下拉菜单 [英] Custom Spinner not hiding the dropdown menu after selection

查看:159
本文介绍了自定义微调没有隐瞒选择后的下拉菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

(Android的API第9版),我创建了一个自定义适配器微调和overrided getView()与具有文本视图我的XML文件来它充气。但现在,我的微调不是用户关闭后的下拉列表中选择一个项目。反正在选择一个项目,关闭微调下拉列表?

code

  // $中的onCreate函数c $ C
    微调名单=(微调)findViewById(R.id.spn_purchaseList);
    listAdapter =新ItemListAdapter(在此,新MyItemList());
    list.setAdapter(listAdapter);
    listAdapter.item_list.addItem(新MyItem(测试,测试项目));
    listAdapter.notifyDataSetChanged();
//结束的onCreate
//下面的类是内部MainActivity延伸活动
类ItemListAdapter扩展了BaseAdapter
{
    上下文语境;
    MyItemList item_list;
    MyItem将selectedItem;
    ItemListAdapter(上下文CON,MyItemList K)
    {
        超();
        this.context = CON;
        this.item_list = K;
        将selectedItem = NULL;
    }    @覆盖
    公众诠释的getCount(){        返回item_list.getCount();
    }    @覆盖
    公共MyItem的getItem(INT为arg0){        返回this.item_list.getList()获得(arg0中)。
    }    @覆盖
    众长getItemId(INT为arg0){        返回this.item_list.getPosition(this.item_list.getList()获得(arg0中));
    }    @覆盖
    公共查看getView(INT位置,查看ARG1,父母的ViewGroup){        LayoutInflater吹气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        查看spinner_item = inflater.inflate(R.layout.spinner_layout,父母,假);        TextView中TX =(TextView中)spinner_item.findViewById(R.id.txt_spinner);
        tx.setId((INT)item_list.getPosition(item_list.getList()获得(位置)));
        tx.setText(this.item_list.getList()获得(位置).name.toString());
        tx.setBackgroundResource(R.drawable.spinner_item);        tx.setOnClickListener(新View.OnClickListener(){            @覆盖
            公共无效的onClick(视图v){
                将selectedItem = item_list.getItem(v.getId());
                list.setSelection(v.getId());            }
        });        返回spinner_item;
    }    @覆盖
    公共查看getDropDownView(INT位置,查看convertView,父母的ViewGroup)
    {
        返回getView(位置,convertView,父母);    }}


解决方案

调用setVisibility(View.GONE)工程,以隐藏下拉,但似乎与微调状态,引起的问题,即你将无法后重新打开下拉它已被关闭。

在preferred办法是得到一个处理的微调并从您的onClick()调用监听其onDetachedFromWindow()。

  @覆盖
公共无效的onClick(视图v){
    // $ C $其中,C获得所选的项目,用它做什么    //隐藏下拉微调
    微调微调=(微调)findViewById(R.id.mySpinner);
    如果(微调!= NULL){
        尝试{
            方法方法= Spinner.class.getDeclaredMethod(onDetachedFromWindow);
            method.setAccessible(真);
            method.invoke(微调);
        }赶上(例外五){
            e.printStackTrace();
        }
    }
}

(Android API version 9)I created a spinner with a custom adapter and overrided getView() to inflate it with my xml file which has a text view. But now, my spinner is not closing the dropdown list after user selects an item. Is there anyway to close the spinner dropdown upon selecting an item?

Code

//Code in onCreate function
    Spinner list = (Spinner) findViewById(R.id.spn_purchaseList);
    listAdapter = new ItemListAdapter(this, new MyItemList());
    list.setAdapter(listAdapter);
    listAdapter.item_list.addItem(new MyItem("Test", "Test Item"));
    listAdapter.notifyDataSetChanged();
//onCreate end
//the class below is inside "MainActivity extends Activity"
class ItemListAdapter extends BaseAdapter
{
    Context context;
    MyItemList item_list;
    MyItem selectedItem;


    ItemListAdapter(Context con,MyItemList k)
    {
        super();
        this.context=con;
        this.item_list=k;
        selectedItem=null;
    }

    @Override
    public int getCount() {

        return item_list.getCount();
    }

    @Override
    public MyItem getItem(int arg0) {

        return this.item_list.getList().get(arg0);
    }

    @Override
    public long getItemId(int arg0) {

        return  this.item_list.getPosition(this.item_list.getList().get(arg0));
    }

    @Override
    public View getView(int position, View arg1, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        View spinner_item = inflater.inflate(R.layout.spinner_layout, parent, false);

        TextView tx = (TextView)spinner_item.findViewById(R.id.txt_spinner);
        tx.setId((int) item_list.getPosition(item_list.getList().get(position)));


        tx.setText(this.item_list.getList().get(position).name.toString());
        tx.setBackgroundResource(R.drawable.spinner_item);

        tx.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                selectedItem = item_list.getItem(v.getId());
                list.setSelection(v.getId());



            }
        });

        return spinner_item;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {


        return getView(position,convertView,parent);

    }

}

解决方案

Calling setVisibility(View.GONE) works to hide the dropdown but it seems to cause issues with the Spinner state, i.e. you will be unable to reopen the dropdown after it has been closed.

The preferred way is to get a handle to the Spinner and call its onDetachedFromWindow() from your onClick() listener.

@Override
public void onClick(View v) {
    // code here to get selected item and do something with it

    // hide the spinner dropdown
    Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
    if (spinner != null) {
        try {
            Method method = Spinner.class.getDeclaredMethod("onDetachedFromWindow");
            method.setAccessible(true);
            method.invoke(spinner);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这篇关于自定义微调没有隐瞒选择后的下拉菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆