Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用动态数据的主细节流主题?_Java_Android - Fatal编程技术网

Java 如何使用动态数据的主细节流主题?

Java 如何使用动态数据的主细节流主题?,java,android,Java,Android,通过创建一个新的android项目并选择masterdetailflow主题,这将提供一个关于如何使用这个主题的示例,这很好。我的问题是这个示例使用静态数据,我需要它是动态的。我的应用程序使用async task以JSON格式从服务获取数据,然后我将其解析并保存在phone DB中 这是DummyContent类: public class DummyContent { /** * An array of sample (dummy) items. */ publi

通过创建一个新的android项目并选择masterdetailflow主题,这将提供一个关于如何使用这个主题的示例,这很好。我的问题是这个示例使用静态数据,我需要它是动态的。我的应用程序使用async task以JSON格式从服务获取数据,然后我将其解析并保存在phone DB中

这是DummyContent类:

public class DummyContent {

    /**
     * An array of sample (dummy) items.
     */
public static List<DummyItem> ITEMS = new ArrayList<DummyItem>();

/**
 * A map of sample (dummy) items, by ID.
 */
public static Map<String, DummyItem> ITEM_MAP = new HashMap<String, DummyItem>();

//  static {
//      // Add 3 sample items.
//      addItem(new DummyItem("1", "Item 1"));
//      addItem(new DummyItem("2", "Item 2"));
//      addItem(new DummyItem("3", "Item 3"));
//  }

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());
        }
    }
}

private static void addItem(DummyItem item) {
    ITEMS.add(item);
    ITEM_MAP.put(item.id, item);
}

/**
 * A dummy item representing a piece of content.
 */
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;
    }
}
公共类DummyContent{
/**
*样本(虚拟)项的数组。
*/
公共静态列表项=新建ArrayList();
/**
*按ID显示的样本(虚拟)项目的地图。
*/
公共静态映射项_Map=newhashmap();
//静止的{
////添加3个示例项。
//增补项目(新项目(“1”、“项目1”);
//增补项目(新项目(“2”、“项目2”);
//增补项目(新项目(“3”、“项目3”);
//  }
公共静态void setContext(Context c){
如果(db==null)db=newmydbadapter(c);//SQLiteOpenHelper+SQLiteDatabase管理器
if(db.isOpen()==false){
db.open();
游标c=db.getProfiles();//数据库查询
if(c.moveToFirst()){
做{
ProfileItem=新的ProfileItem(c.getString(0),c.getString(1),
c、 getString(2));
增编(项目);
}而(c.moveToNext());
}
}
}
专用静态无效添加项(DummyItem){
项目。添加(项目);
项目地图放置(项目id、项目);
}
/**
*表示一段内容的虚拟项。
*/
公共静态类DummyItem{
公共字符串id;
公共字符串内容;
公共DummyItem(字符串id、字符串内容){
this.id=id;
this.content=内容;
}
@凌驾
公共字符串toString(){
返回内容;
}
}
}

您可以看到,我对静态数据进行了注释,并添加了“setContext”,应该调用它来从DB添加数据。我的问题是,我应该在何时何地调用此函数,以便显示数据?我应该在“kind\u name\u ListFragment.java”“onCreate”或“kind\u name\u DetailFragment.java”“onCreate”或两者(如果两者都不是多余的话)或其他地方调用它,有更好的解决方案吗

我的问题是这个示例使用静态数据,我需要它 动态的

最简单的方法是在访问
DummyContent.ITEMS
之前调用
DummyContent.setContext(Context)

(kind_name_ListFragment.java)
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Call to initialize DummyContent.ITEMS
    DummyContent.setContext(getActivity());

    setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), 
                                  android.R.layout.simple_list_item_activated_1,
                                      android.R.id.text1, DummyContent.ITEMS));

}

由于您已经在使用嵌入式数据库存储数据,所以Loader将非常方便


更新您的SomethingListFragment和SomethingDetailFragment,如此URL中的示例。您可以处理DummyContent类。

我通常会使用CursorAdapter连接到ContentProvider,该ContentProvider在下面使用一个数据库,以消除DummyContent.class,但这有点复杂

这应该起作用: 1.)在实例化MyDbAdapter时,您可能想将activity.getApplicationContext()用于上下文。这将让MyDbAdapter存储上下文,而不是您用来构建它。这还允许您从以前无法调用的异步任务中调用更新。 2.)每当更新DummyContent.ITEMS列表时,您希望在ArrayListAdapter上调用notifyDataChange(),它将负责通知ListView更新其项目


另外,如果您不喜欢这个答案:我想您没有关闭光标“c”

您找到解决方案了吗?没有,我仍在等待帮助:(
DummyContent.setContext(getActivity());
((YourAdapter)getListAdapter()).notifyDataSetChanged();