如何仅创建一种方法OnClickListening并将其应用于片段中所有我的复选框?

问题描述 投票:0回答:1

您可以在下面的代码中看到,今天,我需要为每个复选框创建一个setOnClickListener,但我只想制作一个并为所有复选框设置此方法,这样就可以简化代码。通过活动,我能够做到这一点,如第二个代码示例所示:

先看看我的代码:

package com.example.cursobaralhocigano.ui.deck;


import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;


import com.example.cursobaralhocigano.MainActivity;
import com.example.cursobaralhocigano.R;
import com.example.cursobaralhocigano.dao.BancoDeDados;
import com.example.cursobaralhocigano.classes.cBaralhos;
import com.example.cursobaralhocigano.dao.uLibSql;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

/**
 * A simple {@link Fragment} subclass.
 */
public class DeckFragment extends Fragment {
    private uLibSql DB;
    private cBaralhos baralho = new cBaralhos();

    CheckBox ck01, ck02, ck03, ck04, ck05;
    ImageButton Img;

    public DeckFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        LinearLayout ln;
        View view = inflater.inflate(R.layout.fragment_deck, container, false);

        final FloatingActionButton fab = ((MainActivity) getActivity()).findViewById(R.id.fab);

        if (fab.isShown()) {
            fab.hide();
        }

        DB = new uLibSql(getActivity());
        int _baralho = DB.PegaBaralhoSelecionada();

        ck01 = view.findViewById(R.id.ck01);
        ck02 = view.findViewById(R.id.ck02);
        ck03 = view.findViewById(R.id.ck03);
        ck04 = view.findViewById(R.id.ck04);
        ck05 = view.findViewById(R.id.ck05);

        LimpaChecks();

        ck01.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LimpaChecks();
                ck01.setChecked(true);
                DB.GravaBaralhoSelecionada(ck01.getTag().toString());
            }
        });

        ck02.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LimpaChecks();
                ck02.setChecked(true);
                DB.GravaBaralhoSelecionada(ck02.getTag().toString());
            }
        });

        ck03.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LimpaChecks();
                ck03.setChecked(true);
                DB.GravaBaralhoSelecionada(ck03.getTag().toString());
            }
        });

        ck04.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LimpaChecks();
                ck04.setChecked(true);
                DB.GravaBaralhoSelecionada(ck04.getTag().toString());
            }
        });

        ck05.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LimpaChecks();
                ck05.setChecked(true);
                DB.GravaBaralhoSelecionada(ck05.getTag().toString());
            }
        });

        if (_baralho == 1) {
            ck01.setChecked(true);
        }

        if (_baralho == 2) {
            ck02.setChecked(true);
        }

        if (_baralho == 3) {
            ck03.setChecked(true);
        }

        if (_baralho == 4) {
            ck04.setChecked(true);
        }

        if (_baralho == 5) {
            ck05.setChecked(true);
        }


        ln = view.findViewById(R.id.LinearFilho01);

        MostraCartas(1, ln);

        ln = view.findViewById(R.id.LinearFilho02);

        MostraCartas(2, ln);

        ln = view.findViewById(R.id.LinearFilho03);

        MostraCartas(3, ln);

        ln = view.findViewById(R.id.LinearFilho04);

        MostraCartas(4, ln);

        ln = view.findViewById(R.id.LinearFilho05);

        MostraCartas(5, ln);

        return view;

    }


    public void LimpaChecks() {
        ck01.setChecked(false);
        ck02.setChecked(false);
        ck03.setChecked(false);
        ck04.setChecked(false);
    }


    public void MostraCartas(int _baralho, LinearLayout ln) {

        LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(300, 400, 1);

        for (int i = 1; i <= 36; i++) {
            Img = new ImageButton(getActivity());
            Img.setId(View.generateViewId());
            Img.setLayoutParams(param);
            Img.setImageResource(baralho.pegaIdcarta(i, _baralho));
            Img.setScaleType(ImageView.ScaleType.FIT_CENTER);
            Img.setTag(i);
            //Img.setOnClickListener(PegaCk(ck));
            ln.addView(Img);
        }

    }


}

我的第二个示例在某项活动中效果很好

package com.example.cursodebaralho;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.example.cursodebaralho.dao.BancoDeDados;
import com.example.cursodebaralho.modelo.cCartas;

public class EscolhaCarta extends AppCompatActivity {

    private BancoDeDados DB;
    cCartas carta = new cCartas();

    CheckBox ck01, ck02, ck03, ck04;

    LinearLayout ln01;
    ImageButton Img;
    int baralho = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_escolha_carta);

        Toolbar toolbar = findViewById(R.id.toolbar2);
        setSupportActionBar(toolbar);
        toolbar.setTitle("Curso de Baralho Cigano");
        toolbar.setSubtitle("Escolhendo o Baralho de Estudo");

        MostraCartas01();
        MostraCartas02();
        MostraCartas03();
        MostraCartas04();

        DB = new BancoDeDados(this);
        baralho = DB.PegaBaralhoSelecionada();

        ck01 = findViewById(R.id.ck01);
        ck02 = findViewById(R.id.ck02);
        ck03 = findViewById(R.id.ck03);
        ck04 = findViewById(R.id.ck04);

        if (baralho == 1) {
            ck01.setChecked(true);
        }

        if (baralho == 2) {
            ck02.setChecked(true);
        }

        if (baralho == 3) {
            ck03.setChecked(true);
        }

        if (baralho == 4) {
            ck04.setChecked(true);
        }

        ck01.setOnClickListener(PegaCk(ck01));
        ck02.setOnClickListener(PegaCk(ck02));
        ck03.setOnClickListener(PegaCk(ck03));
        ck04.setOnClickListener(PegaCk(ck04));

        /*

        https://thoughtbot.com/blog/android-imageview-scaletype-a-visual-guide
        https://stackoverflow.com/questions/10123830/android-imageview-scaletype-and-item-height

       */
    }

    View.OnClickListener PegaCk(final CheckBox ck) {
        return new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                LimpaChecks();
                ck.setChecked(true);
                DB.GravaBaralhoSelecionada(ck.getTag().toString());

            }
        };
    }

    public void LimpaChecks() {
        ck01.setChecked(false);
        ck02.setChecked(false);
        ck03.setChecked(false);
        ck04.setChecked(false);
    }

    public void MostraCartas01() {

        ln01 = findViewById(R.id.Linear01);
        LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(300, 400, 1);

        for (int i = 1; i <= 36; i++) {
            Img = new ImageButton(this);
            Img.setId(View.generateViewId());
            Img.setLayoutParams(param);
            Img.setImageResource(carta.pegaIdcarta(i, 1));
            Img.setScaleType(ImageView.ScaleType.FIT_START);
            Img.setTag(i);
            //Img.setOnClickListener(PegaCk(ck));
            ln01.addView(Img);
        }

    }

    public void MostraCartas02() {

        ln01 = findViewById(R.id.Linear02);
        LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(300, 400, 1);

        for (int i = 1; i <= 36; i++) {
            Img = new ImageButton(this);
            Img.setId(View.generateViewId());
            Img.setLayoutParams(param);
            Img.setImageResource(carta.pegaIdcarta(i, 2));
            Img.setScaleType(ImageView.ScaleType.FIT_START);
            Img.setTag(i);
            //Img.setOnClickListener(PegaCk(ck));
            ln01.addView(Img);
        }

    }

    public void MostraCartas03() {

        ln01 = findViewById(R.id.Linear03);
        LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(300, 400, 1);

        for (int i = 1; i <= 36; i++) {
            Img = new ImageButton(this);
            Img.setId(View.generateViewId());
            Img.setLayoutParams(param);
            Img.setImageResource(carta.pegaIdcarta(i, 3));
            Img.setScaleType(ImageView.ScaleType.FIT_START);
            Img.setTag(i);
            //Img.setOnClickListener(PegaCk(ck));
            ln01.addView(Img);
        }

    }


    public void MostraCartas04() {

        ln01 = findViewById(R.id.Linear04);
        LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(300, 400, 1);

        for (int i = 1; i <= 36; i++) {
            Img = new ImageButton(this);
            Img.setId(View.generateViewId());
            Img.setLayoutParams(param);
            Img.setImageResource(carta.pegaIdcarta(i, 4));
            Img.setScaleType(ImageView.ScaleType.FIT_START);
            Img.setTag(i);
            //Img.setOnClickListener(PegaCk(ck));
            ln01.addView(Img);
        }

    }

}

非常感谢您的帮助亚历山大

android
1个回答
0
投票

您可以执行以下操作:

public class DeckFragment extends Fragment implements OnClickListener {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        LinearLayout ln;
        View view = inflater.inflate(R.layout.fragment_deck, container, false);

        ArrayList<View> checkboxes = new ArrayList();
        checkboxes.add(view.findViewById(R.id.ck01));
        checkboxes.add(view.findViewById(R.id.ck02));
        checkboxes.add(view.findViewById(R.id.ck03));
        checkboxes.add(view.findViewById(R.id.ck04));
        checkboxes.add(view.findViewById(R.id.ck05));

        for(View v : checkboxes) {
            v.setOnClickListener(this);
        }
    }

    @Override
    public void onClick(View v) {
        LimpaChecks();
        ((CheckBox)v).setChecked(true);
        DB.GravaBaralhoSelecionada(v.getTag().toString());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.