我刚刚看了一下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,因为它似乎永远不会被打开/膨胀。
任何线索?
答案 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的示例。