您可以在下面的代码中看到,今天,我需要为每个复选框创建一个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);
}
}
}
非常感谢您的帮助亚历山大
您可以执行以下操作:
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());
}
}