РЕДАКТИРОВАТЬ: этот вопрос в основном закрыт, и обсуждаются только те проблемы, которые у меня возникают с этим кодом здесь
Для части моего приложения у меня есть страницаэлементов, представленных в виде флажков, каждый со связанным логическим значением, которые в конечном итоге собираются и сохраняются в виде строки следующим образом:
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);
}
РЕДАКТИРОВАТЬ: это версия кода, с которой я сейчас работаю:
package com.citsci.mardeb;
import 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
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