我创建了一个自定义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
}
}
答案 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