Я новичок в разработке android и заблокирован на моем проекте. Я искал решение все это утро и не нашел его здесь.
Я сделал макет с радиогруппой и несколькими радиокнопками. Я использую его для разных видов моего проекта.
Я не знал, что мы не можем найти и элемент по его идентификатору из вида, если этот элемент находится во внешнем виде. Поэтому я искал решение «включить» макет в мою радиогруппу.
Нет проблем с этим, я получаю его с LayoutInflater и могу создать вид моего макета.
Тогда я могу получить радиогруппу этого представления.
Проблема в том, что я не могу этим манипулировать. Радиогруппа распознана, но я не могу получить проверенную радиокнопку, она всегда возвращает -1.
Вот метод onCreate, в котором создается представление.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
View rank_W = inflater.inflate(R.layout.dialog_layout_w, (ViewGroup) findViewById(R.id.rank_w));
View rank_M = inflater.inflate(R.layout.dialog_layout, (ViewGroup) findViewById(R.id.rank_m));
// I also tried the commented way to make the view, it didn't change anything.
//viewRank = getLayoutInflater().inflate(R.layout.dialog_layout, null);
//viewRankW = getLayoutInflater().inflate(R.layout.dialog_layout_w, null);
tvT = findViewById(R.id.tv_T);
tvR = findViewById(R.id.tv_R);
dp = findViewById(R.id.dp);
rankM = findViewById(R.id.rankM);
rankW = findViewById(R.id.rankW);
rankM.setEnabled(false);
rankW.setEnabled(false);
gamesDB = new GamesDB(this);
rgT = findViewById(R.id.rg_t);
rgRM = rank_M.findViewById(R.id.rg_ranks);
rgRW = rank_W.findViewById(R.id.rg_ranksW);
rankM.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (rgT.getCheckedRadioButtonId() == R.id.rd_mm) {
rM = true;
dialogRank(view);
} else if (rgT.getCheckedRadioButtonId() == R.id.rd_wm) {
rM = true;
dialogRankW(view);
}
}
});
}
Я пытаюсь получить отмеченный переключатель в методе dialogRank (просмотр), вот он:
public void dialogRank(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
View dialogLayout = inflater.inflate(R.layout.dialog_layout, null);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//rgRM = rank_M.findViewById(R.id.rg_ranks);
int radioButtonID = rgRM.getCheckedRadioButtonId();
View radioButton = rgRM.findViewById(radioButtonID);
int idx = rgRM.indexOfChild(radioButton);
if (rM) {
newRankM = idx;
rM = false;
} else if (rW) {
newRankW = idx;
rW = false;
}
}
});
builder.setView(dialogLayout);
builder.show();
}
Таким образом, в этом методе открывается диалоговое окно со списком переключателей, и цель для меня - получить индекс проверенной кнопки, когда пользователь нажимает кнопку ОК.
Но idx возвращает -1.
Я не нахожу ничего о внешних радиокнопках, есть ли решение для этого?
Спасибо за чтение (извините за английский).