Android:从片段中更新Activity视图的最佳方法是什么?

时间:2015-11-28 02:58:18

标签: android android-fragments viewflipper

我有一个DialogFragment,当用户点击对话框中的“确定”时,它会被解除,我想重新绘制活动布局。

我在viewflipper中使用Activity三种布局。我是否在片段中使用getActivity()来访问viewflipper,以便更新布局视图?

部分活动文件:

...
private ViewFlipper viewflipper;

protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cardviewinput);
    viewflipper = (ViewFlipper) findViewById(R.id.viewFlipper1);

部分xml文件:

...
<LinearLayout
    android:id="@+id/LinearLayout3"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="center_vertical"  >

<ViewFlipper
    android:id="@+id/viewFlipper1"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<include layout="@layout/cardview_nobuttons"
    android:id="@+id/cardviewNobuttons"  />

<include layout="@layout/cardview_previewbuttons"
    android:id="@+id/cardviewPreviewbuttons" />

<include layout="@layout/cardview_twobuttons"
    android:id="@+id/cardviewTwobuttons"  />

</ViewFlipper>

</LinearLayout>  

部分片段文件:

...
@Override
public void onClick(View v) { 
...   
dismiss();
getActivity().viewflipper.setDisplayedChild(viewflipper.indexOfChild
   (findViewById(R.id.cardviewNobuttons)));
}

1 个答案:

答案 0 :(得分:1)

我强烈建议你反对这种做法。片段不应该直接与其托管活动进行通信。有一个官方指南正在谈论如何处理这个问题Communicating with the Activity

另外,我建议你看看EventBus模式,这可以使这种沟通更容易。有两种专门针对Android的流行实现: