使用嵌套片段的Android Back / Up导航

时间:2014-06-17 16:15:06

标签: android android-fragments android-dialogfragment

我们正在添加一个加载对话框作为片段作为容器内的临时视图,以便在显示主视图之前处理来自服务器的数据时向用户显示。我们希望能够在一个面板(例如框架布局)中显示此对话框,因为我们使用的特定视图是一个模拟iOS SplitViewController的自定义容器片段。潜在地,当装载在平板电脑上时,可能有2个这样的装载碎片同时出现在各自的容器中。

我们使用的片段继承自DialogFragment,所有其他片段基本上都是高度自定义的列表片段。

我们面临的问题是,当我们使用Fragment的childFragmentManager.Replace()方法直接将临时片段添加到容器时,它会完全混淆后面的导航。当它用作调用dialog.show()的模态对话框时,后退导航很好,但对话框没有显示在我们想要的框架中。

有没有办法可以a。)修复后退导航问题或b。)调用dialog.Show()时,在指定的框架中显示对话框?

以下是对话框片段的代码:

public class TestLoadingFragment : DialogFragment
{
    public override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);
        this.Cancelable = false;
        this.HasOptionsMenu = false;
        this.SetStyle(StyleNoTitle, 0);
    }

    public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        return inflater.Inflate(Resource.Layout.TestLoadingFragment_Layout, container, false);

    }

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:minWidth="200dip" android:minHeight="200dip"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ProgressBar style="?android:attr/progressBarStyleLarge" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/loadingViewProgress" android:layout_centerInParent="true" /> <TextView android:text="Loading Please Wait" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lblViewLoadingText" android:gravity="center" android:layout_below="@+id/loadingViewProgress" android:textColor="#ff000000" /> </RelativeLayout> </LinearLayout>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您使用的是ListFragment,则可以在加载数据时致电setListShown(false)以显示加载进度指示符,当列表视图准备就绪时,请致电setListShown(true)

或者,如果您想要自定义微调器布局视图,可以在<ListView>内声明<LinearLayout>项和<FrameLayout>

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ListView
        android:id="@+id/listview"
        android:visibility="gone"
        android:fadingEdgeLength="0dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <LinearLayout 
        android:id="@+id/spinner"
        android:visibility="visible" 
        android:orientation="vertical" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:minWidth="200dip" 
        android:minHeight="200dip"> 
        <RelativeLayout 
            android:layout_width="match_parent" 
            android:layout_height="match_parent"> 
            <ProgressBar 
                style="?android:attr/progressBarStyleLarge" 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:id="@+id/loadingViewProgress" 
                android:layout_centerInParent="true" /> 
             <TextView 
                android:text="Loading Please Wait" 
                android:textAppearance="?android:attr/textAppearanceMedium" 
                android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:id="@+id/lblViewLoadingText" 
                android:gravity="center" 
                android:layout_below="@+id/loadingViewProgress" 
                android:textColor="#ff000000" /> 
        </RelativeLayout> 
    </LinearLayout>
</FrameLayout>

并且一次只能设置一个视图:

ListView list = (ListView)findViewById(R.id.listview);
LinearLayout spinner = (LinearLayout)findViewById(R.id.spinner);

加载数据时:

spinner.setVisibility(View.VISIBLE);
list.setVisibility(View.GONE);

数据准备好后:

spinner.setVisibility(View.GONE);
list.setVisibility(View.VISIBLE);