Android 在CustomList视图中切换按钮

Android 在CustomList视图中切换按钮,android,Android,我有一个customlist视图,所有行都有切换按钮。我有一个用于ToggleButton的onlick listner,我正在尝试将listview中所有toggle按钮的状态设置为false,我展示的按钮除外。我已经在下面发布了适配器的代码。请帮我做这个 为了使其更简单,我必须在按下/单击时将ToggleButton状态设置为True,并将所有其他ToggleButton状态设置为False。而且像一个单选组按钮。请告知 package Test.in.example.testairligh

我有一个customlist视图,所有行都有切换按钮。我有一个用于ToggleButton的onlick listner,我正在尝试将listview中所有toggle按钮的状态设置为false,我展示的按钮除外。我已经在下面发布了适配器的代码。请帮我做这个

为了使其更简单,我必须在按下/单击时将ToggleButton状态设置为True,并将所有其他ToggleButton状态设置为False。而且像一个单选组按钮。请告知

package Test.in.example.testairlight;

import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

public class PaAdapter extends ArrayAdapter<PaModel> {

    SQLiteDatabase db;
    private DBHelper dbH;
    private ArrayList<PaModel> objects;


    public PaAdapter(Context context, int textViewResourceId, ArrayList<PaModel> objects) {
        super(context, textViewResourceId, objects);
        this.objects = objects;
    }

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

        View v = convertView;
        final Context cc=parent.getContext();

        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.pa_list_item, null);
        }

        PaModel i = objects.get(position);

        if (i != null) {

            TextView ttd = (TextView) v.findViewById(R.id.devicelocation);
            final TextView mtd = (TextView) v.findViewById(R.id.deviceid);
            TextView dzone = (TextView) v.findViewById(R.id.txtzonedetail);
            final ToggleButton togglePA = (ToggleButton) v.findViewById(R.id.togglePA);
            final ToggleButton toggleAlert = (ToggleButton) v.findViewById(R.id.toggleAlert);
            final ToggleButton toggleListen = (ToggleButton) v.findViewById(R.id.toggleListen);


            if (ttd != null){
                ttd.setText(i.getDevicelocation());
            }

            if (mtd != null){
                mtd.setText(String.valueOf(i.getDeviceid()));
            }



        toggleListen.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {


                //// Set Everything to OFF State
                //// Turn ON only the active Item



            }
        });

    ////// Listen Button







        if (dzone !=null){
            dzone.setText(i.getDevicezonedetail());

        }


                    }


        return v;
    }




}
package Test.in.example.testairlight;
导入java.util.ArrayList;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入android.widget.ToggleButton;
公共类PaAdapter扩展了ArrayAdapter{
sqlitedb数据库;
私人胸径;
私有ArrayList对象;
公共PaAdapter(上下文上下文、int-textViewResourceId、ArrayList对象){
超级(上下文、textViewResourceId、对象);
this.objects=对象;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
final Context cc=parent.getContext();
如果(v==null){
LayoutInflater充气器=(LayoutInflater)getContext().getSystemService(Context.LAYOUT\u充气器\u SERVICE);
v=充气机充气(R.layout.pa\u列表项,空);
}
PaModel i=objects.get(位置);
如果(i!=null){
TextView ttd=(TextView)v.findViewById(R.id.devicelocation);
最终文本视图mtd=(文本视图)v.findViewById(R.id.deviceid);
TextView dzone=(TextView)v.findViewById(R.id.txtzonedetail);
最终ToggleButton togglePA=(ToggleButton)v.findViewById(R.id.togglePA);
最终ToggleButton ToggleLert=(ToggleButton)v.findViewById(R.id.ToggleLert);
最终ToggleButton toggleListen=(ToggleButton)v.findViewById(R.id.toggleListen);
如果(ttd!=null){
ttd.setText(i.getDevicelocation());
}
如果(mtd!=null){
mtd.setText(String.valueOf(i.getDeviceid());
}
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
////将一切设置为关闭状态
////仅启用活动项
}
});
//////收听按钮
如果(dzone!=null){
dzone.setText(i.getDevicezonedetail());
}
}
返回v;
}
}
像这样的东西

toggleListen.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                       // do whatever you want here
                       togglePA.setChecked(false);
                       toggleAlert.setChecked(false);
                }
            }
        });

我不知道是要将列表中的所有按钮都设置为false,还是仅将当前列表项中的按钮设置为false。 让我们面对第一个问题:

  • 将整个列表中的所有按钮设置为false(单击的按钮除外):
  • 您可以先在适配器中创建一个二维切换按钮数组列表,如下所示:

    ArrayList<ToggleButton[]> tButtons = new ArrayList<ToggleButton[]>();
    
    现在您已经准备好了所有的切换按钮,可以进行修改了

    下面是代码:

    toggleListen.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    for(ToggleButton[] tButtonsArray : tButtons) {
                        for(ToggleButton tButton : tButtonsArray) {
                            if(tButton == buttonView) {
                                tButton.setChecked(true);
                            } else {
                                tButton.setChecked(false);
                            }
                        }
                    }
                }
            }
        });
    
    如果您只想将同一列表项的按钮设置为false,请告诉我:)

    编辑: 也许我应该说,在我看来,这不是最好的解决办法。 我实际上认为你应该在你的模型中的某个地方有数据(真/假)。
    然后,您可以只操作模型,并将模型数据放回视图(切换按钮)以显示。

    您想将列表项(单击切换按钮的位置)中的所有按钮设置为false,还是将列表中的所有按钮都设置为false?
    toggleListen.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    for(ToggleButton[] tButtonsArray : tButtons) {
                        for(ToggleButton tButton : tButtonsArray) {
                            if(tButton == buttonView) {
                                tButton.setChecked(true);
                            } else {
                                tButton.setChecked(false);
                            }
                        }
                    }
                }
            }
        });