在CustomList视图中切换按钮

时间:2015-06-10 06:46:09

标签: android

我有一个自定义列表视图,其中包含所有行的切换按钮。我有一个用于ToggleButton的onlick列表器,我试图将listview中所有切换按钮的状态设置为false,除了我预设的那个。我已经在下面发布了适配器的代码。请帮我解决一下这个。

为了使它更加简单,我必须在按下/单击时将ToggleButton状态设置为True,并将所有其他切换按钮状态设置为False。而且就像一个Radio组按钮。请指教。

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;
    }




}

2 个答案:

答案 0 :(得分:0)

这样的东西?

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);
                }
            }
        });

答案 1 :(得分:0)

我不知道您是否要将列表中的所有按钮设置为false,或者只是将当前列表项中的按钮设置为false。 所以让我们面对第一个:

  1. 将整个列表中的所有按钮设置为false(单击的按钮除外):
  2. 你可以先在适配器中制作一个像这样的二维ArrayList:

    ArrayList<ToggleButton[]> tButtons = new ArrayList<ToggleButton[]>();
    

    因此,有一个ToggleButton-Arrays的ArrayList。每个ToggleButton []由三个ToggleButton对象组成。 ArrayList中的ToggleButton-Arrays数量未定义。

    现在,您必须将ToggleButtons设置为getView()内的ArrayList:

    //other code here
    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);
    ToggleButton[] tButtonsInListItem;
        if(tButtons.get(position) == null) {
            tButtonsInListItem = new ToggleButton[3];
            tButtons.set(position, tButtonsInListItem);
        } else {
            tButtonsInListItem = tButtons.get(position);
        }
    tButtonsInListItem[0] = togglePA;
    tButtonsInListItem[1] = toggleAlert;
    tButtonsInListItem[2] = toggleListen;
    

    现在你已准备好所有的ToggleButtons进行修改了!

    所以这是代码:

    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);
                            }
                        }
                    }
                }
            }
        });
    

    如果您只想将同一个listitem的按钮设为false,请告知我们:)

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