主/明细流 - 在列表项目点击时打开主区域中的列表片段

时间:2014-12-18 17:14:30

标签: java android xml eclipse eclipse-adt

我刚刚在Eclipse中创建了一个主/细节流程,我想知道如何点击特定项目时我可以让我的主列表在Master部分中打开一个不同的列表?我不希望列表在详细信息部分中打开。我已经查看了整个www,但无法找到相关的教程。

"第一个列表"点击时会打开列表A.

"第二个清单"点击后会打开列表B.

"第3个清单"点击时会打开列表C.

MainContent.java

package com.apptacularapps.exitsexpertlondonlite.content;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.view.View;
import android.widget.ListView;

public class MainContent {

    public static List<MainItem> ITEMS = new ArrayList<MainItem>();

    public static Map<String, MainItem> ITEM_MAP = new HashMap<String, MainItem>();

    static {
        addItem(new MainItem("1", "1st list"));
        addItem(new MainItem("2", "2nd list"));
        addItem(new MainItem("3", "3rd list"));
    }

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

    public static class MainItem {
        public String id;
        public String content;

        public MainItem(String id, String content) {
            this.id = id;
            this.content = content;
        }

        @Override
        public String toString() {
            return content;
        }
    }
}

错误1 error 1

package com.apptacularapps.exitsexpertlondonlite.content;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.os.Bundle;

import android.view.View;
import android.widget.ListView;

public class MainContent {

    public static List<MainItem> ITEMS = new ArrayList<MainItem>();

    public static Map<String, MainItem> ITEM_MAP = new HashMap<String, MainItem>();

    static {
        addItem(new MainItem("1", "1st list"));
        addItem(new MainItem("2", "2nd list"));
        addItem(new MainItem("3", "3rd list"));
    }

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

    public static class MainItem {
        public String id;
        public String content;

        public MainItem(String id, String content) {
            this.id = id;
            this.content = content;
        }

        @Override
        public String toString() {
            return content;
        }
    }

    public void onItemSelected(String id) {
        Bundle arguments = new Bundle();
        arguments.putString(MasterListFragment.ARG_ITEM_ID, id);
        MasterListFragment fragment = new MasterListFragment();
        fragment.setArguments(arguments);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.master_list_container, fragment).commit();
    }
}

错误2 enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

您需要将主片段替换为包含您要显示的列表的片段。

假设你有这样的事情:

@Override
public void onItemSelected(String id) {
        Bundle arguments = new Bundle();
        arguments.putString(MasterListFragment.ARG_ITEM_ID, id);
        MasterListFragment fragment = new MasterListFragment();
        fragment.setArguments(arguments);
        getSupportFragmentManager().beginTransaction()
                                   .replace(R.id.item_detail_container, fragment).commit();

}

所以而不是

.replace(R.id.item_detail_container, fragment).commit();

你会打电话

.replace(R.id.master_list_container, fragment).commit();

其中R.id.master_list_container是包含您的主人<FrameLayout>的容器(例如ListFragment)。


查看截图,我认为您需要将<fragment>中的activity_item_list.xml替换为<FrameLayout android:id="master_list_container">,然后按照上面提到的步骤进行操作。

您还需要通过添加类似

的内容将原始主文件ListFragment放置到位
getSupportFragmentManager().beginTransaction()
        .replace(R.id.master_list_container, new ItemListFragment()).commit();

onCreate()的{​​{1}}。