我们正在添加一个加载对话框作为片段作为容器内的临时视图,以便在显示主视图之前处理来自服务器的数据时向用户显示。我们希望能够在一个面板(例如框架布局)中显示此对话框,因为我们使用的特定视图是一个模拟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>
非常感谢任何帮助!
答案 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);