我试图用切换按钮实现一个列表视图。一切进展顺利,问题出在切换按钮的方法setChecked上。向下进入列表视图时,该按钮会自动设置为偏移。我正在使用自定义适配器,这是getView方法:

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

        final Holder holder = new Holder();

        View rowView = inflater.inflate(R.layout.list_view_layout,null);

        holder.tv = (TextView) rowView.findViewById(R.id.tv_item);
        holder.tb = (ToggleButton) rowView.findViewById(R.id.tgl_status);

        holder.tv.setText(Name.get(position));


        holder.tb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    // The toggle is enabled
                    holder.tb.setChecked(isChecked);
                    Toast.makeText(activity, Name.get(position) + "ON", Toast.LENGTH_LONG).show();
                } else {
                    // The toggle is disabled
                    Toast.makeText(activity, "OFF", Toast.LENGTH_LONG).show();
                    holder.tb.setChecked(isChecked);
                }
            }
        });

        rowView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(activity, "You Clicked "+Name.get(position), Toast.LENGTH_LONG).show();
            }
        });
        return rowView;
    }


问题在于:


  owner.tb.setChecked(isChecked);


总是错误的。

我的list_view_layout.xml文件是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/tv_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

    <ToggleButton
        android:id="@+id/tgl_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       />
</LinearLayout>


我正在使用使用此自定义适配器的片段。

最佳答案

我在这里没有问题。

您正在/ cc中选中/取消选中此ToggleButton。也就是说:当您选中此CheckedChangeListener时,您的ToggleButton将再次对其进行检查。您正在复制不需要的操作。

如果您实际上是根据onCheckedChangeWeatherArrayList中的一个对象(比如说Weathers)检查它,那么您应该进行以下操作:

if (weatherList.get(position).isChecked) {
    holder.tb.setChecked(true);
} else {
    holder.tb.setChecked(false);
}

关于android - setChecked无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31495196/

10-10 09:42