【问题标题】:how to add listener to a spinner inside listview adapter in android如何将侦听器添加到android中listview适配器内的微调器
【发布时间】:2017-09-11 21:06:33
【问题描述】:

public class XpressGoldLoanAdapter extends ArrayAdapter<TransactionDetailsUserData> {

        private List<TransactionDetailsUserData>list;
        private Context context;
        String securityNo;

        public XpressGoldLoanAdapter( List<TransactionDetailsUserData> list, Context ctx) {
            super(ctx, R.layout.reminderinflater, list);
            this.list = list;
            this.context = ctx;
        }

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public TransactionDetailsUserData getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return list.indexOf(getItem(position));
        }

        private  class ViewHolder{

            TextView tv_securityNo;
            Spinner spin_securityType,spin_security,spin_purityconfirmed ;
            LinearLayout sublayout;
            EditText ed_numbers,ed_grossWeight,ed_netWeight,ed_rate_perGram,ed_branchMarginRate,ed_amount;
            Button btn_savesecurity;

        }

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

            View view = convertView;
            Spinner spin_securityType,spin_security,spin_purityconfirmed;
            TextView tv_securityNo;
            EditText ed_numbers,ed_grossWeight,ed_netWeight,ed_rate_perGram,ed_branchMarginRate,ed_amount;
            LinearLayout sublayout;
            Button btn_savesecurity;

            ViewHolder holder = new ViewHolder();

            if (convertView == null) {
                LayoutInflater inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.expressloanitem,null);

                spin_securityType       =(Spinner) view.findViewById(R.id.spin_securityType);
                spin_security           =(Spinner) view.findViewById(R.id.spin_security);
                spin_purityconfirmed    =(Spinner) view.findViewById(R.id.spin_purityconfirmed);
                tv_securityNo           =(TextView)view.findViewById(R.id.tv_securityNo);
                ed_numbers              =(EditText)view.findViewById(R.id.ed_numbers);
                ed_grossWeight          =(EditText)view.findViewById(R.id.ed_grossWeight);
                ed_netWeight            =(EditText)view.findViewById(R.id.ed_netWeight);
                ed_rate_perGram         =(EditText)view.findViewById(R.id.ed_rate_perGram);
                ed_branchMarginRate     =(EditText)view.findViewById(R.id.ed_branchMarginRate);
                ed_amount               =(EditText)view.findViewById(R.id.ed_amount);
                sublayout               =(LinearLayout)view.findViewById(R.id.sublayout);
                btn_savesecurity         =(Button) view.findViewById(R.id.btn_savesecurity);

                holder.spin_securityType = spin_securityType;
                holder.spin_security = spin_security;
                holder.spin_purityconfirmed = spin_purityconfirmed;
                holder.tv_securityNo = tv_securityNo;
                holder.ed_numbers = ed_numbers;
                holder.ed_grossWeight = ed_grossWeight;
                holder.ed_netWeight = ed_netWeight;
                holder.ed_rate_perGram = ed_rate_perGram;
                holder.ed_branchMarginRate = ed_branchMarginRate;
                holder.ed_amount = ed_amount;
                holder.sublayout = sublayout;
                holder.btn_savesecurity = btn_savesecurity;
                view.setTag(holder);
            }
            else{
                holder =(ViewHolder) view.getTag();
            }

            TransactionDetailsUserData pojo = enqList.get(position);
            securityNo = pojo.getSecurityCount();
            Log.d("securityNo",securityNo);
            holder.tv_securityNo.setText(securityNo);

            SpinnerLogoAdapter spinnerAdapter3=new SpinnerLogoAdapter(XpressGoldLoan.this.getApplicationContext(),securityTpeIcons,securityTpeitems);
            holder.spin_securityType.setAdapter(spinnerAdapter3);
            SpinnerLogoAdapter spinnerAdapter4=new SpinnerLogoAdapter(XpressGoldLoan.this.getApplicationContext(),securityIcons,securityitems);
            holder.spin_security.setAdapter(spinnerAdapter4);
            SpinnerLogoAdapter spinnerAdapter5=new SpinnerLogoAdapter(XpressGoldLoan.this.getApplicationContext(),purityIcons,purityitems);
            holder.spin_purityconfirmed.setAdapter(spinnerAdapter5);


            //spinner security type


            holder.spin_securityType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {

                }
            });


            //save security
            holder.btn_savesecurity.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                }
            });
            return view;

        }
    }

这是我的 listview 适配器。当尝试在侦听器中添加 spinner.getSelectedItem() 时,它会显示一些错误。应用程序在微调器的 onItemSelected 内崩溃。请找到解决方案。我只需要从微调器中获取所选项目.我没有太多详细说明我的问题,因为它很容易理解。请帮助

【问题讨论】:

  • 请添加android监控日志查看异常
  • 我已经添加了截图。请检查

标签: android listview spinner


【解决方案1】:

将您的持有人更改为最终的(正如错误告诉您的那样)

final ViewHolder holder;

if (convertView == null) {
    holder = new ViewHolder()     
    ... //the rest of code here stays the same
} else {
    holder =(ViewHolder) view.getTag();
}

【讨论】:

  • 您可以赋值一次。在制作错误的 cmets 之前自己尝试一下。只有当变量在声明时具有默认值时,您的陈述才能正确。
  • 那么你显然不明白如何设置最终变量。这段代码只为变量赋值一次。完全符合预期且完全合法。 @KaveeshKanwal
  • 我提供的代码。完成我显示的更改后,您就可以使用屏幕截图中的行
【解决方案2】:

在onItemselectedListener中加入这一行

holder.spin_securityType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(final AdapterView<?> parent,final View view,final int position,final long id) {
                 getSelectedItem(parent, view, position, id);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

在 XpressGoldLoanAdapter 类中再编写一个方法来为您完成任务。

final void getSelectedItem(AdapterView<?> parent, View view, int position, long id) {
    String selectedItem = holder.spin_securityType.getSelectedItem().toString();
     // do your task here
}

【讨论】:

    【解决方案3】:

    我尝试使用此代码解决了它,因为 securityTpeitems[] 是一个字符串数组,并且我已从微调器中获取位置。 String selectedSecType = securityTpeitems[position].toString();

    【讨论】:

      猜你喜欢
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多