Во-вторых, для вашего вопроса, хорошо, как только вы нажмете применить (может быть отправлен или установлен) внутри этого метода onClick, проверьте состояние каждого из них с помощью метода isSelected (), и выполните работу, которая должна быть выполнена в соответствии с Для каждого флажка, вероятно, каждый флажок отвечает за разные вещи, поэтому каждый флажок, если установлен или нет, будет вызывать определенный метод для обработки этого состояния (установлен или не отмечен).
ТИРОВАТЬ: этот вопрос в основном закрыт и обсуждаются только те проблемы, которые у меня есть с этим кодомВот
Для части моего приложения у меня есть страница элементов, которые представлены в виде флажков, каждый со связанным логическим значением, которое в конечном итоге собирается и сохраняется в виде строки следующим образом:
final CheckBox gas_oil = (CheckBox) findViewById(R.id.gas_oil);
gas_oil.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
if (gas_oil.isChecked())
{
impacts.append(getString(R.string.gas_oil) + " | ");
anythingchecked = true;
}
}
});
это очень утомительно и, похоже, не очень эффективный способ сделать это, так как у меня есть 9 или 10 элементов, которые пользователи могут проверить или нет. также этот метод означает, что если они щелкают и не щелкают что-то, этот элемент все еще находится вStringBuilder impacts
и что, если они щелкают это снова, тогда это там дважды.
Моим решением было иметь все в массивах:
String[] impactsn = getResources().getStringArray(R.array.impacts);
final boolean[] impactsb = new boolean[impactsn.length];
final CheckBox[] impactsc = new CheckBox[impactsn.length];
View[] impactsv = new View[]{findViewById(R.id.gas_oil),findViewById(R.id.ghost_fishing),findViewById(R.id.marsh_damage),findViewById(R.id.nav_haz),findViewById(R.id.shell_damage),findViewById(R.id.waste_pollution),findViewById(R.id.wild_entang),findViewById(R.id.other)};
for (int i = 0; i < impactsn.length; i++)
{
impactsc[i] = (CheckBox) impactsv[i];
impactsc[i].setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (impactsc[i].isChecked())
impactsb[i] = true;
else
impactsb[i] = false;
}
});
}
к сожалению, это приводит к тому, что (насколько я понимаю) вещи внутриOnClickListener
должен быть окончательным. С кодом, как написано,i
никогда не может быть окончательным, так что я в тупике.
Должен ли я иметь массивOnClickListeners
также? Должен ли я вызывать метод за пределами кода, который у меня здесь?
Кроме того, ниже приведен получатель, который я планировал использовать, я думаю, что эта часть будет работать очень хорошо:
String getImpacts ()
{
String[] impactsn = getResources().getStringArray(R.array.impacts);
StringBuilder impactss = new StringBuilder();
for (int i = 0; i < impactsn.length; i ++)
{
if (impactsb[i])
impactss.append(impactsn[i] + " | ");
}
return String.valueOf(impactss);
}
РЕДАКТИРОВАТЬ: это версия кода, с которым я сейчас работаю:
пакет com.citsci.mardeb;
импорт android.app.Activity; импорт android.content.res.Resources; импорт android.os.Bundle; импорт android.view.View; import android.widget.CheckBox; import android.widget.EditText;
открытый класс Impacts extends Activity реализует View.OnClickListener {int length = 7; логический []лецb = новый логический [] {ложь, ложь, ложь, ложь, ложь, ложь, ложь, ложь}; EditText view;
public void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.impacts);
// for (int i = 0; i <length; i ++) // sizesb [i] = false;
View[] impactsv = new View[]
{
findViewById(R.id.gas_oil),
findViewById(R.id.ghost_fishing),
findViewById(R.id.marsh_damage),
findViewById(R.id.nav_haz),
findViewById(R.id.shell_damage),
findViewById(R.id.waste_pollution),
findViewById(R.id.wild_entang),
findViewById(R.id.other)
};
CheckBox[] impactsc = new CheckBox[length];
for (int i = 0; i < length; i++)
{
impactsc[i] = (CheckBox) impactsv[i];
impactsc[i].setOnClickListener(this);
}
}// end of onCreate
@Override
public void onClick(View v)
{
switch (v.getId()) {
case (R.id.gas_oil):
impactsb[0] =! impactsb[0];
break;
case (R.id.ghost_fishing):
impactsb[1] =! impactsb[1];
break;
case (R.id.marsh_damage):
impactsb[2] =! impactsb[2];
break;
case (R.id.nav_haz):
impactsb[3] =! impactsb[3];
break;
case (R.id.shell_damage):
impactsb[4] =! impactsb[4];
break;
case (R.id.waste_pollution):
impactsb[5] =! impactsb[5];
break;
case (R.id.wild_entang):
impactsb[6] =! impactsb[6];
break;
case (R.id.other):
impactsb[7] =! impactsb[7];
}
}
String getImpacts ()
{
String[] impactsn = new String[length];
Resources myResources = getResources();
impactsn = myResources.getStringArray(R.array.impacts);
StringBuilder impactss = new StringBuilder();
for (int i = 0; i < length; i ++)
{
if (impactsb[i])
impactss.append(impactsn[i] + " | ");
}
if (String.valueOf(impactss) != "")
impactss.insert(0, "Impacts: ");
return String.valueOf(impactss);
}
}// end of Impacts.class