关于主/细节流模板的两个问题

时间:2012-07-10 13:05:19

标签: android

我刚刚看了一下Master / Detail Flow模板,我无法弄清楚2件事。

1)当它生成的代码似乎使用Fragment兼容性支持时,为什么需要Android版本11?特别是,为什么你不能生成运行Android版本8的模板? (例如此导入)

import android.support.v4.app.FragmentActivity;

2)主活动如何知道是否在新活动或详细信息窗格中显示详细信息(如果它足够大)?它似乎是通过这段代码来实现的:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_item_list);

    if (findViewById(R.id.item_detail_container) != null) {
        mTwoPane = true;
        ((ItemListFragment) getSupportFragmentManager()
                .findFragmentById(R.id.item_list))
                .setActivateOnItemClick(true);
    }
}

setContentView(R.layout.activity_item_list);将布局设置为ListFragment,它只设置了自己的适配器,但我看不出findViewById(R.id.item_detail_container) != null将如何返回true,因为它似乎永远不会被打开/膨胀。

任何线索?

6 个答案:

答案 0 :(得分:14)

经过深思熟虑后,答案就是因为values-large/refs.xml

<resources>
    <item type="layout" name="activity_item_list">@layout/activity_item_twopane</item>
</resources>

它将正常布局的请求重定向到更大的布局(双窗格版本),其中定义了R.id.item_detail_container

这很混乱。我不确定为什么他们不只是将大型布局称为普通布局,而是使用不同的xml。

答案 1 :(得分:13)

这对我有用。

1)将ActionBarSherlock添加到项目中:Project - &gt;属性 - &gt; Android - &gt;选择ActionBarSherlock并按“添加”按钮。如果您没有ABS,那么您需要在继续之前从http://actionbarsherlock.com/获取它。

2)“AndroidManifest.xml”:将minSdkVersion设置为10(Gingerbread)。我认为你可以更低。

android:minSdkVersion="10"

3)“activity_item_list.xml”:只需删除“list_content”,因为Eclipse一直在抱怨你需要Honeycomb或更高版本。

tools:layout="@android:layout/list_content"  <-- remove

4)“activity_item_twopane.xml”:删除Honeycomb-or-later行。

android:divider="?android:attr/dividerHorizontal"  <-- remove
tools:layout="@android:layout/list_content"        <-- remove

5)ItemListActivity.java:使用SherlockFragmentActivity。

//public class ItemListActivity extends FragmentActivity implements
public class ItemListActivity extends SherlockFragmentActivity implements

6)ItemListFragment.java:将参数修改为setListAdapter()。

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

    // TODO: replace with a real list adapter.
        //setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(),
        //    android.R.layout.simple_list_item_activated_1,
        //    android.R.id.text1, DummyContent.ITEMS));

        int layout = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) ?
            android.R.layout.simple_list_item_activated_1 :
            android.R.layout.simple_list_item_checked;

        setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(),
            layout, DummyContent.ITEMS));
}

7)“ItemDetailActivity.java”:使用SherlockFragmentActivity和getSupportActionBar()。

//public class ItemDetailActivity extends FragmentActivity {
public class ItemDetailActivity extends SherlockFragmentActivity {
    ...
    //getActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

在进行更改后,该应用程序在Gingerbread,ICS和Jelly Bean中运行。

__ 溶胶

答案 2 :(得分:2)

尊重您的第一个问题:

您需要更改班级ItemListFragment

这样:

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

为此:

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

ItemDetailActivity这一行评论:

// getActionBar().setDisplayHomeAsUpEnabled(true);

答案 3 :(得分:0)

我认为Master / Detail Flow模板需要api level 11,因为它使用Action Bar。我将尝试将此模板与ActionBarSherlcock一起使用,看看它是否适用于android 2.2或2.3。

答案 4 :(得分:0)

关于第一个问题,它需要V11的一个原因是它使用list_content,并且它不包含在兼容性库中。解决方法是here

答案 5 :(得分:0)

问题第二部分中使用的技术是Layout Alias的示例。