0

Я добавил флажки динамически в моем методе onCreate(). Когда один или несколько из них проверены, я хочу отобразить две кнопки. Я новичок в работе с Android, но из того, что я могу сказать, это не сработает, чтобы сделать эту проверку (см. Если флажки отмечены) в том же методе, что и флажки, то есть onCreate(), потому что они не могут быть найдены , т. е. еще не созданы? Если это так, в каком методе я должен выполнить проверку? Я хочу добавить флажки при запуске этой операции и проверить, все ли флажки проверены.Где проверяется, установлен ли CheckBox динамически? (Android)

Эти флажки добавлены в displayEntries(db).

Вот мой OnCreate():

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     DatabaseHandler db = new DatabaseHandler(this); 
     displayEntries(db); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent i = new Intent(MainActivity.this, AddActivity.class); //FromActivity.this 
       startActivity(i); 
      } 
     }); 

     checkChecked(); 
    } 

checkChecked():

public void checkChecked() { 
     //Check whether items have been checked 
     TableLayout tl = (TableLayout) findViewById(R.id.entry_table); 
     for (int i = 0; i < tl.getChildCount(); i++) { 
      View child = tl.getChildAt(i); 
      if (child instanceof CheckBox) { 
       CheckBox checkBoxChild = (CheckBox) child; 
       Log.d("Checkbox", "Checkbox is found"); 
       if (checkBoxChild.isChecked()) { 
        Log.d("Checkbox", "working!"); 
        Button button1 = (Button) findViewById(R.id.button_edit); 
        button1.setVisibility(View.INVISIBLE); 
        Button button2 = (Button) findViewById(R.id.button_delete); 
        button2.setVisibility(View.INVISIBLE); 
       } 
      } 
     } 
    } 

(На данный момент я пытаюсь сделать кнопки невидимым как вы могли видеть выше, так как Я не хотел «жестко кодировать» в файле макета, с которого они должны быть невидимыми для начала, - подумал, что это может сделать невозможным изменить? Но это вопрос позже ...)

EDIT: Я понял, что моя ошибка заключалась в том, что флажки, где дети моего TableLayout. На самом деле они были детьми рядов в TableLayout. Теперь, когда мне удалось установить фактический флажок, я могу заставить кнопки исчезнуть, установив их как невидимые при их создании и видимых onClick. Оставшаяся проблема заключается в том, что кнопки, конечно, остаются видимыми, даже если все кнопки снова не отмечены. Любые идеи по включению и выключению кнопок в зависимости от того, отмечены ли любые из этих флажков?

ответ

1

Не понял ваш вопрос в первую очередь. Пожалуйста, проигнорируйте мой первый ответ.

Если вы хотите слушать на флажком вы можете попробовать

myCheckBox.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View view) { 
     //do something 
    } 
}); 

Все, что вы делаете в OnCreate() будет воссоздана с каждым циклом деятельности. Поэтому вы можете захотеть сохранить состояние этого флажка и изменить это состояние, когда кто-то на нем нажимает.

EDIT после @Ingrid комментарий:

Похоже, есть две проблемы, которые необходимо решить. Один из них сохраняет состояние и восстанавливает его в цикле активности/фрагмента, а другой устанавливает видимые кнопки в зависимости от состояния N флажков.

Предполагая, что вы работаете с объектом базы данных, у вас есть возможность использовать динамически созданные флажки для управления данными в объекте базы данных. Флажки представляют собой логические значения в объекте БД или в списке объектов. Поскольку флажки являются динамическими и представляют вещи в вашей БД, нет смысла хранить свое состояние в двух местах. Если вы это сделаете, ситуация перестанет синхронизироваться, и у вас будет неприятная ошибка. Вместо этого полагайтесь только на объект DB. Таким образом, обновите свой объект DB, когда вы нажмете на флажок. В onResume() извлекает этот объект БД (из пакета или БД в зависимости от вашей архитектуры) и устанавливает состояние флажка/кнопки на основе состояния объекта БД.

Вы можете использовать onPause() для сохранения объекта db. или сохраняйте его при щелчке по флажку, поэтому вам не нужно опасаться потерять состояние между ними. используйте onResume для настройки базы компонентов пользовательского интерфейса в текущем состоянии объекта db.И последнее, но не менее важное: при обновлении объекта db проверьте, нужно ли показывать/скрывать кнопки. (То есть, если есть на фиксированном количестве кнопок, но N числа флажков.

Надеется, что это помогает.

+0

Я не уверен, но, возможно, вы все-таки поняли мой вопрос. Это решение дало мне рабочее решение для проверки, хотя для флажков, которые я не создал динамически при запуске (думал, что мое решение работало раньше, но это не так). Но где поставить этот код так, чтобы флажки действительно были созданы, когда я хочу их проверить? – Ingrid

+0

ОК, так как я добавил в свой вопрос, он работает, чтобы сделать их видимыми в onCreate(). Благодаря! Я бы очень хотел сделать их невидимыми, когда все флажки не отмечены, но это может быть еще один вопрос. – Ingrid

+0

Похоже, у вас есть две проблемы, которые необходимо решить. 1 - сохранять/восстанавливать состояние динамически добавленных флажков в onPause() onResume, когда ваши циклы активности. И 2 вам нужно прислушиваться к изменению этих флажков как группы. Верный? –

0
//Use shared preference to save. 
SharedPreferences preferedName=getSharedPreferences("SavedName", Activity.MODE_PRIVATE); 
       SharedPreferences.Editor editor = preferedName.edit(); 
       editor.putboolean("SavedName",value); 
       editor.apply(); 
       editor.commit(); 
//and to retrive. 
SharedPreferences preferedName=getSharedPreferences("SavedName", Activity.MODE_PRIVATE); 
     boolean chkNull =preferedName.getString("SavedName",false); 

и использовать логический в качестве значения флажка.

Смежные вопросы