Android 使用接口NullPointerException从MainActivity调用片段的方法
我正在尝试执行这些步骤(如下所示)在我的活动中调用片段方法,而不使用任何片段id和标记。但是我得到了NullpointerException。这对我来说是非常重要的工作。。。这些步骤是否正确从活动中调用片段方法如果是,我做得对吗???如果否,有没有更好的方法从我的活动中调用片段方法??下面给出了我的主要活动和框架。。。请帮忙,谢谢 _我正在尝试做的步骤 1步骤)首先创建一个接口 您的片段必须实现这个接口Android 使用接口NullPointerException从MainActivity调用片段的方法,android,android-fragments,interface,nullpointerexception,android-fragmentactivity,Android,Android Fragments,Interface,Nullpointerexception,Android Fragmentactivity,我正在尝试执行这些步骤(如下所示)在我的活动中调用片段方法,而不使用任何片段id和标记。但是我得到了NullpointerException。这对我来说是非常重要的工作。。。这些步骤是否正确从活动中调用片段方法如果是,我做得对吗???如果否,有没有更好的方法从我的活动中调用片段方法??下面给出了我的主要活动和框架。。。请帮忙,谢谢 _我正在尝试做的步骤 1步骤)首先创建一个接口 您的片段必须实现这个接口 public MyFragment extends Fragment implements
public MyFragment extends Fragment implements MyInterface
第2步)在活动中,定义MyInterface类型的字段:
3)创建片段并添加片段时:
最后,当出现需要调用Fragment方法的情况时,只需调用:
listener.myAction() ; // this will call the implementation in your MyFragment class
MainActivity.java
ClaimFragment.java
我的日志
你的代码真是一团糟,我看到两个接口,你应该只有一个。但是您只使用“hell”接口,但是“hell”字段在哪里定义?你把片段引用存储在哪里?我想,把我试图实现的代码放在哪里,以便让别人容易理解,如果你愿意,我可以把我所有的代码放在哪里?什么是
claimFragment
在MainActivity
中?它不知从何处出现(正如viewPager
)。片段引用??虽然声明了claimFragment
,但在哪里分配了引用?我希望看到类似于ClaimFragment-ClaimFragment=**something(ClaimFragment.newInstance(),newclaimfragment())等。*
。你的代码真是一团糟,我看到两个接口,你应该只有一个。但是你只使用“地狱”接口,但是“地狱”字段定义在哪里?你在哪里存储片段引用?我想,把我试图实现的代码放在那里,以便让其他人容易理解,如果你想的话,我可以把我所有的代码放在哪里?是什么claimFragment
在MainActivity
中?它不知从何处出现(就像viewPager
一样)。片段引用??它在哪里声明了claimFragment
,在哪里分配了引用?我希望看到类似claimFragment-claimFragment=**某物(claimFragment.newInstance(),新的ClaimFragment()等。**
。
private MyInterface listener ;
public void setListener(MyInterface listener) {
this.listener = listener ;
}
setListener(myFragment);
listener.myAction() ; // this will call the implementation in your MyFragment class
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener{
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
private hell listener;
ClaimFragment claimFragment;
setListener(claimFragment);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
listener.willwork();
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) { }
@Override
public void onPageScrollStateChanged(int arg0) { }
});
}
tabLayout.setupWithViewPager(viewPager);
//THIS IS MY INTERFACE IN MAINACTIVITY
public interface hell {
void willwork();
}
public void setListener(hell listener) {
this.listener = listener ;
}
public class ClaimFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener , MainActivity.hell {
@Override
public void willwork() {
Toast.makeText(getContext(), "this is ClaimFrag", Toast.LENGTH_SHORT).show();
}
}
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: FATAL EXCEPTION: main
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: Process: earn.free., PID: 20843
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'void earn.free.cashback.snapcash.MainActivity$hell.willwork()' on a null object reference
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at earn.free.cashback.snapcash.MainActivity$2.onPageSelected(MainActivity.java:152)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1856)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.v4.view.ViewPager.scrollToItem(ViewPager.java:625)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:609)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSele cted(TabLayout.java:2008)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1025)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.design.widget.TabLayout.selectTab(TabLayout.java:995)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1272)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1377 )
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:19866)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5254)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
04-06 18:31:23.104 20843-20843/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
04-06 18:31:23.105 747-1255/? W/ActivityManager: Force finishing activity 1 earn.free.cashback.snapcash/.MainActivity