【问题标题】:Master/Detail flow - open list fragment in master area upon list item tap主/明细流 - 在列表项点击时在主区域中打开列表片段
【发布时间】:2014-12-18 17:14:30
【问题描述】:

我刚刚在 Eclipse 中创建了主/详细信息流,我想知道当点击特定项目时如何让我的主列表在主部分中打开不同的列表?我不希望在详细信息部分打开列表。我翻遍了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

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

【问题讨论】:

  • 你为什么不放一个 onItemClickListener 然后在你希望用户点击的特定项目上显示第二个列表等

标签: java android xml eclipse eclipse-adt


【解决方案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 是一个容器(例如&lt;FrameLayout&gt;),其中包含您的主控ListFragment


看你的截图,我认为你需要将activity_item_list.xml中的&lt;fragment&gt;替换为&lt;FrameLayout android:id="master_list_container"&gt;,然后按照我上面提到的步骤操作。

您还需要通过添加类似

的内容来放置原始主控 ListFragment
getSupportFragmentManager().beginTransaction()
        .replace(R.id.master_list_container, new ItemListFragment()).commit();

在您的ItemListActivity 中的onCreate()

【讨论】:

  • 好的,按照你提到的,但仍然有一些错误 + 不确定用什么替换 ARG_ITEM_ID。在 Error 2 下查看我上面的屏幕截图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 2014-07-09
  • 2015-01-16
  • 1970-01-01
  • 2011-12-24
相关资源
最近更新 更多