将AdapterView与导航抽屉结合使用

时间:2015-11-26 17:23:43

标签: java android android-studio navigation-drawer android-adapterview

我的应用程序的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));
    }
});

现在,打开新活动(详细信息)时不显示导航抽屉。

如果没有为每项活动编写导航抽屉代码,请告诉我如何操作......

提前致谢。

1 个答案:

答案 0 :(得分:1)

嘿,在你看到答案之前,你应该看一下这个Android dev Summit Video,它会给你一个好主意做什么,加上它有一种轻松实现导航抽屉布局的新方法。 为此,您有两个选项,首先,最优选的是使用Fragments而不是Activities,并且只有一个FragmentActivity包含DrawerLayoutFrameLayout这将包含`片段&#39;图。

FragmentActivity.java

    <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个视图。

parent_activity.xml

<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应该是这样的:

ParentActivty.java

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()视图。

我个人更喜欢第一个选项,因为它是文档中的约定,但你可以这样做。