【问题标题】:Button on ListView is working but not always workListView 上的按钮正在工作,但并不总是有效
【发布时间】:2015-10-29 04:48:39
【问题描述】:
       public class ListAdapter extends ArrayAdapter<ListItem> {
        private ArrayList<ListItem> listItems;
        private Context context;
        private boolean[] check = new boolean[10];
        private boolean checked;/////STRANGE!!


        public ListAdapter(Context context, int textViewResourceId, ArrayList<ListItem> listItems) {
            super(context, textViewResourceId, listItems);
            this.listItems = listItems;
            this.context = context;
        }

        @Override
        public int getViewTypeCount() {
            return 2;
        }

        @Override
        public int getItemViewType(int position) {
            if(position > 0) return 1;
            else return 0;
        }

        @Override
        @SuppressWarnings("deprecation")
        public View getView(final int position, View convertView, ViewGroup parent) {
            Log.i("EXPAND","in getView : "+position);

            int viewType =this.getItemViewType(position);
            ListViewHolder holder = null;
            ListItem listItem = listItems.get(position);
            switch(viewType){
                case 0:
                    if(convertView == null){
                        Log.i("EXPAND","null");
                        LinearLayout textViewWrap;
                        LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        TextView text;
                        convertView = vi.inflate(R.layout.setting_list_item, null);
                        textViewWrap = (LinearLayout) convertView.findViewById(R.id.set_pull);
                        text = (TextView) convertView.findViewById(R.id.just_setting);
                        holder = new ListViewHolder(text);

                        // setViewWrap IS REQUIRED
                        holder.setViewWrap(textViewWrap);
                        //
                    }
                    else{
                        holder = (ListViewHolder) convertView.getTag();
                    }
                    holder.getViewWrap().setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, listItem.getCurrentHeight()));

                    holder.getTextView().setText(listItem.getText());

                    holder.getTextView().setCompoundDrawablesWithIntrinsicBounds(listItem.getDrawable(), 0, 0, 0);

                    convertView.setTag(holder);

                    // setHolder IS REQUIRED
                    listItem.setHolder(holder);
                    //
                    final Button scanBtn = (Button)convertView.findViewById(R.id.ScanAll);
                    scanBtn.setOnClickListener(new View.OnClickListener(){
                       public void onClick(View view){
                           Log.i("EXPAND","ScanBtn clicked");
                       }
                    });
                    return convertView;
                case 1:
                    if(convertView == null){
                        Log.i("EXPAND","null");
                        LinearLayout textViewWrap;
                        LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        TextView text;
                        convertView = vi.inflate(R.layout.list_item, null);
                        textViewWrap = (LinearLayout) convertView.findViewById(R.id.text_wrap);
                        text = (TextView) convertView.findViewById(R.id.text);
                        holder = new ListViewHolder(text);

                        // setViewWrap IS REQUIRED
                        holder.setViewWrap(textViewWrap);
                        //
                    }
                    else{
                        holder = (ListViewHolder) convertView.getTag();
                    }
                    holder.getViewWrap().setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, listItem.getCurrentHeight()));

                    holder.getTextView().setText(listItem.getText());

                    holder.getTextView().setCompoundDrawablesWithIntrinsicBounds(listItem.getDrawable(), 0, 0, 0);

                    convertView.setTag(holder);

                    // setHolder IS REQUIRED
                    listItem.setHolder(holder);
                    //
                    //
                    final ImageButton check_box = (ImageButton) convertView.findViewById(R.id.check_button);
                    check_box.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {

                            // record what is selected
                            //.............
                            //change appearance
                            if (check[position]) {
                                Log.i("EXPAND","checked : "+position );
                                check[position] = false;
                                check_box.setBackgroundResource(R.drawable.empty);
                            } else {
                                Log.i("EXPAND","not checked : "+position);
                                check[position] = true;
                                check_box.setBackgroundResource(R.drawable.checked_check_box);
                            }
                        }
                    });
                    check_box.setFocusable(true);
                    //
                    return convertView;
                default:
                    Log.i("EXPAND","serverly default!!");
            }

           return convertView;
      } 
 }

按钮工作但并不总是工作,特别是对于类型 0 的 scanBtn。

【问题讨论】:

    标签: android button expandablelistview


    【解决方案1】:

    是的,按钮正在工作,但并非总是如此,因为您仅在
    viewType == 0,
    时定义了它,但如果它等于 1,则按钮 onClick() 不会执行任何操作。

    如果您希望按钮始终工作,您必须在
    viewType == 1 的情况下再次定义它。

    【讨论】:

    • 感谢您的回答~但是我有两种布局,只有 viewType==0 包含扫描按钮。在 viewType==1 的情况下,converView 将无法抓取 ScanButton,或者我该怎么做?
    • 您的意思是,如果 viewType == 1,您不希望按钮出现?
    • 是的~ ListItem 有两种不同的布局。它们包含不同的组件。我是通过使用开关盒做到的。
    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2020-12-21
    相关资源
    最近更新 更多