【问题标题】:Toggle Button in CustomList View自定义列表视图中的切换按钮
【发布时间】:2015-06-10 06:46:09
【问题描述】:

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

为了更简单,我必须在按下/单击时将 ToggleButton 状态设置为 True,并将所有其他切换按钮状态设置为 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;
    }




}

【问题讨论】:

  • 您想将仅列表项(单击了切换按钮的位置)中的所有按钮设置为 false,还是将列表中的所有按钮设置为 false?

标签: android


【解决方案1】:

这样的?

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

【讨论】:

    【解决方案2】:

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

    1. 将整个列表中的所有按钮设置为false(点击的除外):

    你可以先在你的适配器中创建一个 ToggleButtons 的二维 ArrayList,如下所示:

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

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

    现在,您必须将 ToggleButtons 设置到 ArrayList 中,在 getView() 中:

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

    现在您的所有切换按钮都准备好进行修改了!

    代码如下:

    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,请告诉我 :)

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

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 2018-08-05
      • 1970-01-01
      • 2014-09-25
      • 2023-03-26
      • 2014-06-03
      相关资源
      最近更新 更多