如何从CustomView调用片段

时间:2014-09-29 12:35:20

标签: android fragment android-custom-view

我创建了一个自定义EditTextView,我希望在自定义EditTextView聚焦时调用片段。

我写了这样的代码,但是在调用片段时我遇到了错误。

如果(某人有一个好主意从自定义视图调用Fragment){请教我();}

这是我的代码:

public class OriginalEditText extends EditText {

    public OriginalEditText(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public OriginalEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        setText("");
        setHint("it is original");

        setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    // ////////////////////////////////////////////
                    // /I want to Call Fragment here. ////////////
                    // //////////////////////////////////////////
                    Fragment fgm = null;
                    testFragment testFragment=new testFragment();
                    FragmentManager manager=fgm.getFragmentManager();//null pointerException occurred here
                    FragmentTransaction transaction=manager.beginTransaction();

                    transaction.add(R.id.originalEditText1,testFragment, "test" );
                    transaction.commit();
                    // ///////////////////////////////////////////////////////////////////////////////
                    // /but above code not work.....How to call Fragment from CustomView ////////////
                    // /////////////////////////////////////////////////////////////////////////////


                }

            }
        });

    }

    public OriginalEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

}

2 个答案:

答案 0 :(得分:0)

在上面的两行上将fgm设置为null。显然,当你编写fgm.getFragmentManager()时,你会得到一个空指针异常。我建议你在activity / fragment中设置自定义视图的onFocusListener。

为了提供活动和片段之间的通信,您可以点击以下链接: link

答案 1 :(得分:0)

我认为您的部分问题可能来自您对FragmentManager的理解 在参考文档中,FragmentManager被描述为“与活动内部的Fragment对象交互的接口”。

在您的代码中,您将OnFocusChangeListener作为匿名内部类提供,并创建一个名为Fragment的{​​{1}},您将其设置为fgm。因此,当您调用fgm.getFragmentManager()时,您实际上是在尝试获取尚未分配给null的{​​{1}} FragmentManager

您可以做的是确保在创建自定义编辑文本的实例时,将Fragment作为Activity传递。然后,您可以使用对Activity的引用来获取FragmentManager。

Context