java - 将 AdapterView 与抽屉导航结合起来

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

我的应用程序的 MainActivity 中有一个抽屉导航。 在此 Activity 中,设置了 AdapterView。 当我单击适配器的某一行时,我希望打开一个新 Activity ,但位于同一个抽屉导航下:

searchResultList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        startActivity(new Intent(MainActivity.this, Details.class));
    }
});

现在,新 Activity (详细信息)已打开,但不显示抽屉式导航栏。

请告诉我如何做到这一点,而无需为每个 Activity 编写抽屉导航的代码...

提前致谢。

最佳答案

嘿,在你看答案之前,你应该看看这个 Android dev Summit Video ,它会让您知道该怎么做,而且它还有一种轻松实现抽屉导航布局的新方法。 为此,您有两个选择,第一个也是最好的选择是使用 Fragments 而不是您的 Activities 并拥有一个包含您的 FragmentActivity DrawerLayout 和一个将包含“Fragment” View 的 FrameLayout

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 的代码和 View 设置,并且您可以从该 ParentActivity 进行扩展您的 Activity 。您还需要使用一个 parent_activity.xml ,它将您的 DrawerLayout 作为主标记,并有一个 ViewStub 来添加您的每个其中的 Activity View 。

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();
}}

您可以从新的Activity调用setUpChildActivtiyView()方法来设置您的内容,您也可以在不使用ViewStub的情况下获得相同的结果 code> 但使用 addView() 膨胀添加新的 Activity View 到 ParentActivity View 方法。

<小时/>

我个人更喜欢第一个选项,因为它是文档中的约定,但您可以采用任何一种方式。

关于java - 将 AdapterView 与抽屉导航结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33944197/

相关文章:

java - Camel 聚合器完成大小与相关表达式?

java - 如果字符串以负号开头,setText 将无法正常工作

android - 包 com.google.android.maps 不存在 "osmdroid"Android Studio

java - 更换屏幕时 LibGDX 屏幕重叠

java - editText.getText().toString() 检索字符串全部大写

android - 您如何在移动 Android 项目上进行测试驱动开发?

android - Meteor:如何将 native 移动应用程序指向已部署的服务器

ubuntu - ubuntu 中的 android studio 错误启动

java - Android Studio - 应用程序编译,但不会运行。查看错误

java - 从内部匿名类访问外部匿名类