使用 DialogFragment 从布局 xml 调用方法。它是如何工作的?

Posted

技术标签:

【中文标题】使用 DialogFragment 从布局 xml 调用方法。它是如何工作的?【英文标题】:Calling a method from layout xml with DialogFragment.. how does that work? 【发布时间】:2012-09-03 12:00:23 【问题描述】:

假设我有这个按钮:

<Button
android:id="@+id/idone"
android:layout_
android:layout_
android:layout_weight="1"
android:text="D2"
android:onClick="myMeth"/>

我曾多次使用它来调用布局 xml 中的方法,因为它从扩展此类视图的活动中调用方法。

最近使用 DialogFragments,它根本不起作用。我不断收到错误消息,告诉我这种方法不存在。那么它在哪里寻找这种方法呢?我已将其添加到 DialogFragment 类中:

public class myActivity extends DialogFragment 

public DiceDialog() 
    // empty constructor


 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
        View view = inflater.inflate(R.layout.myDialog, container);
        getDialog().setTitle("Hello");
        return view;
    

public void myMeth(View view) 
//...
    

以及在实例化 FragmentManager 并调用对话框的 Activity 中:

public Class MainActiviry Extends  FragmentActivity 

//...
public void onCreate(Bundle savedInstanceState) 
// ..
FragmentManager fm = getSupportFragmentManager();
MyActivity dialog = new AddDiceDialog();
dialog.show(fm, "tag");


public void myMeth(View view)
//...

消息仍然是 MyMeth 没有找到。

我已经read 认为使用接口和侦听器是在活动和对话片段之间进行通信的正确方式,但我在这里要弄清楚的是在哪里进行 myMeth 调用,因为它被称为.

【问题讨论】:

XML 仍因您的活动而膨胀。而且我猜布局充气器会在它被充气的地方寻找那个方法,Activity。 【参考方案1】:

您可以在您的Activity 中实现public myMeth(View view),然后它将检查当前可见的Fragment,并调用其方法。

如果您想在Fragment 中使用多个可调用方法,您可以利用调用视图的id 并实现switch,根据View 的id 调用不同的片段方法。

【讨论】:

你的意思是 MyMeth 将在活动中被查找?因为我加了还是找不到 是的,myMeth 将在活动中被调用,但您必须将其定义为:“public void myMeth(View view)” 我仍然收到相同的错误消息,您自己尝试过吗?我现在编辑了我的问题 请注意我之前所说的,您必须将其定义为“public void myMeth(View view)” - 而不是“public myMeth()”

以上是关于使用 DialogFragment 从布局 xml 调用方法。它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

DialogFragment.getDialog 返回 null

DialogFragment OnCreateView与OnCreateDialog的自定义布局

DialogFragment OnCreateView 与 OnCreateDialog 的自定义布局

无法动态更改自定义 DialogFragment 布局

DialogFragment 中的 Kotlin 合成和自定义布局

DialogFragment - 访问布局组件的位置[即editText.setText(“”)]