Во-вторых, для вашего вопроса, хорошо, как только вы нажмете применить (может быть отправлен или установлен) внутри этого метода 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

Ответы на вопрос(3)

Ваш ответ на вопрос