Я хочу реализовать «список избранного», и давайте предположим, что у меня есть пустой макет.На onCreate()
есть super.onCreate(savedInstanceState); setContentView(R.layout.main);
, а затем я открываю базу данных с моими любимыми животными, загружаю несколько вещей и динамически добавляю кнопки к макету.
Схема базы данных такая:
CREATE TABLE animals(_id INTEGER PRIMARY KEY, name TEXT NOT NULL, layout TEXT NOT NULL)
и в базе данных есть:
_id - - - - - - - - name - - - - - - - - - layout<br>
1 - - - - - - - - -- cat - - - - - - - - -- R.layout.cat<br>
2 - - - - - - - - -- dog - - - - - - - - -- R.layout.dog<br>
3 - - - - - - - - -- turtle - - - - - - - - R.layout.turtle
Конечно, существуют макеты / xml-файлы (R.layout.cat, R.layout.dog, R.layout.turtle)
.
Итак, выувидеть три кнопки с надписью кошка, собака и черепаха.В OnClickListener
есть следующее:
Intent intent = new Intent(MyFavorites.this, Animal.class);
Log.d ("onClick", button.getmyLayout());
// Shows either R.layout.cat, R.layout.dog or R.layout.turtle
// depending on what button was pressed. This works fine.
intent.putExtra("myLayout", button.getmyLayout());
// closes the database
myDbHelper.close();
startActivity(intent);
Animal.class
может отображать все животные-xml-файлы, поскольку все они имеют одинаковую функциональность.Вот почему макет всегда передается одному и тому же классу!
Animal.class:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final int myLayout = getIntent().getIntExtra("myLayout", R.layout.main);
setContentView(myLayout);
}
Теперь вот проблема.Я передаю String, а не Integer, и в журнале cat есть:
Ключ myLayout ожидается Integer, но значением является java.lang.String.Возвращено значение по умолчанию 2130903044.
Значением по умолчанию является R.layout.main, который вы найдете в автоматически сгенерированном R.class
как шестнадцатеричное число, а в десятичном формате - 2130903044. Поэтому я понимаюсообщение об ошибке.Но я не могу придумать другой способ решить эту проблему.Я думал о getters and setters
в R.class
, но, конечно, они будут удалены при следующей сборке.