【问题标题】:how to check the check box in ListView and change the text in same row in listView?如何检查ListView中的复选框并更改listView中同一行的文本?
【发布时间】:2018-01-25 19:53:17
【问题描述】:

我有带有复选框和文本视图的列表视图。当我选中复选框时,更改同一行中的文本。这样我将检查列表视图中的所有复选框并更改每一行中的文本。谁能用示例代码解释一下?

public class DialogAdapter extends BaseAdapter{
    //private LayoutInflater inflater = null;
    ArrayList<String> timeList = new ArrayList<String>(); 
    Context context;

    public DialogAdapter(Context context, ArrayList<String> timeList) {
        // TODO Auto-generated constructor stub         

        this.context = context;
        this.timeList = timeList;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        //return timings.size();
        return timeList.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return timeList.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @SuppressLint("ViewHolder")
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        //String timing = "10-30,14-08,16-30,19-00";
        LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.dialog_row_list,null);

        //timeListView.setVisibility(convertView.VISIBLE);

        TextView txt_time=(TextView) convertView.findViewById(R.id.text_times);
        txt_time.setText(timeList.get(position).toString());

        EditText comments=(EditText)convertView.findViewById(R.id.editText_comment);


        final TextView txt_Action=(TextView) convertView.findViewById(R.id.textView_act);

        CheckBox cBox= (CheckBox) convertView.findViewById(R.id.checkBox_action);

        cBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @SuppressLint("ResourceAsColor")
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                int getPosition = (Integer) buttonView.getTag(); 
                 timeList.get(getPosition).setSelected(buttonView.isChecked());
                 Toast.makeText(context, "position"+getPosition, 0).show();
                 if(isChecked){
                        txt_Action.setText("finished");
                        txt_Action.setTextColor(R.color.Green);
                    }
                    else{
                        txt_Action.setText("UnChecked");
                        txt_Action.setTextColor(R.color.Red);
                    }
            }


        });


        return convertView;
    }

}

这是我的代码,请检查n给出解决方案如何在检查列表视图中的复选框时更改列表视图文本???

【问题讨论】:

    标签: android listview checkbox textview


    【解决方案1】:

    在ListView 适配器的getView 方法中:

    if(yourCheckBox.isChecked)
               yourTextView.setText("text if checkBox is checked.");
    else
               yourTextView.setText("text if checkBox is not checked.");
    

    【讨论】:

      【解决方案2】:

      checkboxes 和texviews 之前有视图,即listview,如果您想从listview 访问textviews,请确保您是从listview 访问的一项布局 喜欢

      TextView txtvw=findViewByID(ur_layout_of_list_item).findViewByID(ur_textview);
      

      之后将完成更改。

      【讨论】:

        【解决方案3】:

        首先,我建议您对 listview 适配器使用 ViewHolder 模式,这样您就不需要在每次滚动列表时都执行 findViewById() 这将防止您的 listview 性能下降,而且我更喜欢使用 @987654322 @以上CheckedChangeListener()。

        以下是您可以尝试的示例代码

        public class CustomAdapter  extends BaseAdapter {
        
            private Context context;
            public static ArrayList<Item> modelArrayList;
        
        
            public CustomAdapter(Context context, ArrayList<Item> modelArrayList){
        
                this.context = context;
                this.modelArrayList = modelArrayList;
        
            }
        
            @Override
            public int getViewTypeCount() {
                return getCount();
            }
        
            @Override
            public int getItemViewType(int position) {
                return position;
            }
        
            @Override
            public int getCount() {
                return modelArrayList.size();
            }
        
            @Override
            public Object getItem(int position) {
                return modelArrayList.get(position);
            }
        
            @Override
            public long getItemId(int position) {
                return 0;
            }
        
            @Override
            public View getView(int position, View convertView, ViewGroup parent){
                ViewHolder viewHolder;
        
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.layout_list_view_row_items, parent, false);
                viewHolder = new ViewHolder(convertView);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
        
            Item currentItem = (Item) getItem(position);
            if(currentItem.isChecked())
                viewHolder.tvName.setText("Checked);
            else
                viewHolder.tvName.setText("Unchecked);
        
            viewHolder.checkBox.setChecked(currentItem.isChecked());
            viewHolder.checkBox.setOnClickListener(new OnClickListener() {
        
            @Override
            public void onClick(View v) {
                final boolean checked = currentItem.isChecked();
                if(checked){
                   viewHolder.checkBox.setChecked(!checked);
                   viewHolder.tvName.setText("Unchecked");
                   currentItem.setChecked(!checked);  
                }else{
                   viewHolder.checkBox.setChecked(checked);
                   viewHolder.tvName.setText("Checked");
                   currentItem.setChecked(checked);  
        
                }
        
            }
        
          });
            return convertView;
            }
        
        private class ViewHolder {
        
            protected CheckBox checkBox;
            private TextView tvName;
        
            public ViewHolder(View view) {
                checkBox = (CheckBox)view.findViewById(R.id.checkbox);
                tvName = (TextView) view.findViewById(R.id.textView);
            }
        
        }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-05
          • 1970-01-01
          • 2016-04-01
          • 2015-08-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-30
          • 2023-03-20
          相关资源
          最近更新 更多