如何显示对话框片段从ImageView onClick在回收视图适配器
我有ActionBarDialog(DialogFragment),CarAdapter(RecycleView)和SportFragment。我在SportFragment中创建方法(infoMethod)以显示DialogFragment并正常工作。但是,如果我想调用infoMethod在CarAdapter是不行的(显示java.lang.NullPointerException)如何显示对话框片段从ImageView onClick在回收视图适配器
infoMethod在SportFragment
public void infoMethod(){
Bundle args = new Bundle();
args.putString("title", "Dialog with Action Bar");
ActionBarDialog actionbarDialog = new ActionBarDialog();
actionbarDialog.setArguments(args);
actionbarDialog.show(getActivity().getSupportFragmentManager(),
"action_bar_frag");
}
我尝试从CarAdapter
public MyViewHolder(View view) {
super(view);
image= (ImageView) view.findViewById(R.id.imageViewlist);
image.setOnClickListener(this);
}
@Override
public void onClick(View v) {
SportFragment infoFrag = new SportFragment();
if (v.getId() == image.getId()){
v.startAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.imagelist));
infoFrag.infoMethod(); //call infoMethod not work
Toast.makeText(v.getContext(), "ITEM PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(v.getContext(), "ROW PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
}
}
logcat的
调用infoMethod09-29 13:30:09.292 18661-18661/com.paijostudio.hitungmasa E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.paijostudio.hitungmasa.fragment.SportFragment.infoMethod(SportFragment.java:210)
at com.paijostudio.hitungmasa.adapter.CarAdapter$MyViewHolder.onClick(CarAdapter.java:73)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
任何解决方案显示DialogFragment?谢谢
似乎
infoFrag.infoMethod(); //call infoMethod not work
确实不工作,因为@SunnySydeUp可能是正确的。也许尝试为
显示java.lang.NullPointerException 在com.paijostudio.hitungmasa.fragment.SportFragment.infoMethod在前面加了行号(SportFragment.java:210)
是非常具体的关于它。你试图对一些空的东西做些什么。从这里发生的事情看,这很可能是SportFragment。
我的建议是为了调试而分解。所以我会移动方法
public void infoMethod(){
SportFragment之外。并将其移动到类
CarAdapter
这意味着SportFragment可以为null。只要检查一下是否有效。如果是这样,那就是我所期望的,你必须在创建SportFragment时解决这个问题。一旦解决了问题,您可以将方法移回原处。寻找获取,或在Android文档中创建Fragments。
https://developer.android.com/guide/components/fragments.html
UPDATE: 作为补充和接收的详细信息。由于SportFragment创建不正确,碎片没有附加任何活动。
看一看下面的答案正确传达给你的片段 How to create interface between Fragment and adapter?
既然你想在应用中创建两个独立的区域对话,我建议把它出它自己的类
public class DialogHelper {
public static void infoMethod(FragmentManager fragmentManager) {
Bundle args = new Bundle();
args.putString("title", "Dialog with Action Bar");
ActionBarDialog actionbarDialog = new ActionBarDialog();
actionbarDialog.setArguments(args);
actionbarDialog.show(fragmentManager, "action_bar_frag");
}
}
然后在SportFragment
更换DialogHelper.infoMethod(getActivity().getSupportFragmentManager());
至于你的电话你CarAdapter
,你需要参加一个FragmentManager
。
recyclerView.setAdapter(new CarAdapter(getActivity().getSupportFragmentManager()))
...
public class CarAdapter extends RecyclerView.Adapter<MyViewHolder> {
private FragmentManager fragmentManager;
public CarAdapter(FragmentManager fragmentManager) {
this.fragmentManager = fragmentManager;
}
public class MyViewHolder {
...
@Override
public void onClick(View v) {
if (v.getId() == image.getId()){
v.startAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.imagelist));
DialogHelper.infoMethod(fragmentManager);
Toast.makeText(v.getContext(), "ITEM PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(v.getContext(), "ROW PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
}
}
}
}
谢谢,不是工作,但我我在SportFragment中再次修改,然后是CarAdapter,这是工作,投票有用。 –
在这里显示您的日志...这将有助于你。 –
我只是猜测在这里,但我认为你正在调用'infoMethod',它期望附加一个活动。但在那个时候,这项活动还没有完成。除非将其添加到片段管理器,否则它不会执行整个片段生命周期。 “infoMethod”必须存在于SportFragment中是否有原因? – SunnySydeUp
@Kuldeep Kulkarni log cat add –