Как изменить фиктивный контент в андроид мастер / детали деятельности?
Я бы изменил элементы, сгенерированные eclipse в схеме master/detail. Я не могу найти способ сделать это. В частности, я бы взял элементы из файла ресурсов xml (res/values /arrays).
это файл Java:
package com.ga.termeapp.dummy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DummyContent {
public static class DummyItem {
public String id;
public String content;
public DummyItem(String id, String content) {
this.id = id;
this.content = content;
}
@Override
public String toString() {
return content;
}
}
public static List<DummyItem> ITEMS = new ArrayList<DummyItem>();
public static Map<String, DummyItem> ITEM_MAP = new HashMap<String, DummyItem>();
static {
addItem(new DummyItem("1", "Le terme"));
addItem(new DummyItem("2", "Le cure termali"));
addItem(new DummyItem("3", ""));
}
private static void addItem(DummyItem item) {
ITEMS.add(item);
ITEM_MAP.put(item.id, item);
}
}
3 ответа
Возможное решение:
Замените статический класс своим собственным. В моем случае, DummyItem
становится ProfileItem
и имеет разные атрибуты и DummyContent
становится ProfileListContent
,
Затем замените статический блок static { addItem ... }
статическим методом. В следующем случае мне нужно загрузить элементы из базы данных:
public static void setContext(Context c) {
if (db == null) db = new MyDbAdapter(c); // SQLiteOpenHelper + SQLiteDatabase manager
if (db.isOpen() == false) {
db.open();
Cursor c = db.getProfiles(); // database query
if (c.moveToFirst()) {
do {
ProfileItem item = new ProfileItem(c.getString(0), c.getString(1),
c.getString(2));
addItem(item);
} while (c.moveToNext());
}
}
}
Я называю метод setContext
из моей основной деятельности в начале onCreate
метод, перед любой другой операцией.
public void onCreate(Bundle savedInstanceState) {
ProfileListContent.setContext(this);
...
Если вы хотите динамически добавить элемент:
public static void insertProfile(ProfileItem profile) {
db.insertProfile(profile); // add item to the database
addItem(profile); // the same addItem provided with the eclipse wizard
}
Конечно, вы можете изменить макет элементов ListView, я привел пример здесь.
Это то, что сработало для меня, не уверен, что это лучшая практика. Снимите статический блок и на ItemListActivity.java
на Oncreate
добавить этот код
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (DummyContent.ITEMS.isEmpty())
{
DummyContent.addItem(new DummyItem("1", getResources().getString(R.string.menu1)));
DummyContent.addItem(new DummyItem("2", getResources().getString(R.string.menu2)));
DummyContent.addItem(new DummyItem("3", getResources().getString(R.string.menu3)));
}
Надеюсь это поможет
У меня была та же проблема, но я решил взять все значения из массива, который я изменил
addItem(new DummyItem("1", "Le terme"));
addItem(new DummyItem("2", "Le cure termali"));
addItem(new DummyItem("3", ""));
Я отредактировал эти addItem, а затем, если вы хотите добавить строку к вашим элементам, вы должны отредактировать всю эту часть кода.
public String id;
public String content;
public DummyItem(String id, String content) {
this.id = id;
this.content = content;
Надеюсь, это поможет вам.