我的应用程序的MainActivity中有一个导航抽屉。 在此活动中,设置了AdapterView。 当我单击适配器的其中一行时,我想要打开一个新活动,但是在相同的导航抽屉下:
searchResultList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
startActivity(new Intent(MainActivity.this, Details.class));
}
});
现在,打开新活动(详细信息)时不显示导航抽屉。
如果没有为每项活动编写导航抽屉代码,请告诉我如何操作......
提前致谢。
答案 0 :(得分:1)
嘿,在你看到答案之前,你应该看一下这个Android dev Summit Video,它会给你一个好主意做什么,加上它有一种轻松实现导航抽屉布局的新方法。
为此,您有两个选项,首先,最优选的是使用Fragments
而不是Activities
,并且只有一个FragmentActivity
包含DrawerLayout
和FrameLayout
这将包含`片段&#39;图。
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
根据 Android 文档中使用DrawerLayout
的内容,您可以在详细信息here中找到更多内容。
如果您想知道如何在代码中向Fragments
添加Activity
,那么您需要执行以下操作:
FragmentManager fm = getSupportFragmentManager();
/*if you are using a FragmentActivity or an AppCompatActivity as
your super class you'll need to use getSupportFragmentManager
method*/
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.YOUR_FRAMELAYOUT_ID, fragment, fargmentTag);
/*Here you should add your frameLayout ID as your first argument
Thats where your new fragment will reside on the screen its like
an iframe.
This will replace the current fragment shown in your frameLayout if any and
add the new one*/
ft.addToBackStack(null);
/*You can add your fragment to your backstack and assign a String value
as its key if you want to get back to it in the future*/
ft.commit();
//By commiting you apply the Fragment transaction and start
//drawing the Fragment on screen
另一个选项是让Parent Activity
具有DrawerLayout
的代码和视图设置,并从ParentActivity
中的Activities
延伸。您还需要使用parent_activity.xml
作为主标记DrawerLayout
,并ViewStub
添加Activity
个视图。
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ViewStub
android:id="@+id/layout_stub"
android:inflatedId="@+id/myActivityLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
此处您应该继承的ParentActivty
应该是这样的:
public class ParentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.parent_activity);
}
public void setUpChildActivityView(int childActivityView){
ViewStub stub = (ViewStub) findViewById(R.id.layout_stub);
stub.setLayoutResource(childActivityView);
View inflated = stub.inflate();
}}
您可以从新setUpChildActivtiyView()
调用Activity
方法设置内容,也可以在不使用ViewStub
但充气并使用Activity
方法将新ParentActivity
视图添加到addView()
视图。
我个人更喜欢第一个选项,因为它是文档中的约定,但你可以这样做。