我使用了expandable
navigation drawer
。
这是FrameLayout
的活动。如何识别用户当前可见的Fragment
。
在此活动中,许多imageButton
因此差异fragment
我必须执行不同的事件,因此imageButton onclick
我已确定用户当前可见的片段。
`
<ImageView
android:background="@drawable/navigation_icon"
android:id="@+id/titleHeaderImageView"
android:layout_width="75dp"
android:layout_height="50dp"
android:layout_margin="5dp"
/>
<ImageView
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/header"
android:id="@+id/wallHeader" />
<ImageButton
android:id="@+id/btnActivityBack"
android:src="@drawable/prev"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="100dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
<ImageButton
android:id="@+id/btnActivityWrong"
android:src="@drawable/no"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
<ImageButton
android:id="@+id/btnActivityRight"
android:src="@drawable/yes"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
<ImageButton
android:id="@+id/btnActivityEdit"
android:src="@drawable/edit"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
<ImageButton
android:id="@+id/btnActivitySearch"
android:src="@drawable/search"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
<ImageButton
android:id="@+id/btnActivityAdd"
android:src="@drawable/plus"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
<ImageButton
android:id="@+id/btnActivityNext"
android:src="@drawable/next"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
<ImageButton
android:id="@+id/btnActivitySetting"
android:src="@drawable/setting"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="3dp"
android:background="@color/color2"/>
</LinearLayout>
<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">
<!-- Drawer Content -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color3"
android:layout_marginTop="0dp"/>
<!-- The navigation menu -->
<ExpandableListView
android:id="@+id/navigationExpandableListView"
android:layout_width="260dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@color/ex_listview_background" >
</ExpandableListView>
</android.support.v4.widget.DrawerLayout>
`
答案 0 :(得分:1)
找到当前片段
Fragment currentFragment = getFragmentManager().findFragmentById(R.id.content_frame);
这会找到当前添加到FrameLayout(content_frame)的片段。 这应该足够了,但是如果你想检查它是否真的可见,请使用以下内容:
currentFragment.isVisible();
Fragment.isVisible()的文档 -
如果片段当前对用户可见,则返回true。这个 意思是:(1)已添加,(2)其视图附在窗口上, (3)不隐藏。
答案 1 :(得分:0)
为了识别现在可见的片段,当您单击ListView项时,需要将片段名称存储在任何字符串变量中。每次替换片段时,您需要将该片段的名称存储在该变量中。
答案 2 :(得分:0)
您可以执行以下操作:
String currentFragmentName;
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
currentFragmentName = "Current fragment name";
}
});
这样做,您将可以控制当前可见的fragment
答案 3 :(得分:0)
也许您不需要获取当前片段。只需在片段类中添加事件处理程序,如下所示:
view.findViewById(R.id.titleHeaderImageView).setOnClickListener(new View.OnClickListener(){
swith(page){
case:1
....
case:2
....
}
}
页面是页码。通常,您应该在创建时将页码传递给Fragment。例如,Fragment类可以使用它来创建函数:
int page;
public static FirstFragment newInstance(int page, String title) {
FirstFragment fragmentFirst = new FirstFragment();
fragmentFirst.page=page;
return fragmentFirst;
}
答案 4 :(得分:0)
当您显示片段时,您必须将其标记放入backstack中,如:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);
ft.add(R.id.primaryLayout, fragment, tag);
ft.addToBackStack(tag);
ft.commit();
在下面的基本活动中创建一个方法,并在onactivitycreated()方法中的片段中调用它,它将返回片段的标记,然后你可以使用switch case。
public String getActiveFragment() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
return null;
}
String tag = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1).getName();
return tag;