这是我第一次使用ViewPager,经过一段时间它现在可以工作,我可以在三个不同的活动(主要,扫描和选项)之间切换。我的问题是访问Main-和ScanActivity中的listViews,EditText和FloatingActionButton。
我想要实现的,应该与此类似:
private FloatingActionButton fab;
public static void setupContent (View view, String title) {
......
fab = view.findViewById (R.id.fab);
....
}
public void someMethod () {
fab.setOnClickListener....
}
对于超出以下代码的参考,请查看我的github:https://github.com/ChristopherPS96/SmartFridge/tree/master/app/src/main/java/com/example/christopher/smartfridge
请注意,这个项目正在进行中,所以并非一切都很完美
这是MainActivity.java中的方法,它可以工作。现在我想扩展它,我可以在ListView上设置OnClickTimeListener,或者对此方法做任何事情。我总是得到NullpointerExceptions或根本没有任何事情发生。
public static void setupContent(View view, String title) {
if(title.equals("Hauptseite")) {
FloatingActionButton fab = view.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Test", Toast.LENGTH_LONG).show();
}
});
}
if(title.equals("Scanseite")) {
FloatingActionButton fab = view.findViewById(R.id.fabScan);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Alternativer Test", Toast.LENGTH_LONG).show();
}
});
}
}
到目前为止我尝试了什么:
制作ListView,EditText static(导致NullpointerException和MemoryLeak)
- 存储静态ArrayList中的视图和标题(ArrayList为空)
使用MainActivity mainactivity调用新方法= new MainActivity()
mainactivity.someMethod()(NullpointerException)
答案 0 :(得分:1)
您现在正在做的是在不同的布局之间切换。您可能想要的是使用您现在拥有的每个布局创建三个Fragments
。根据{{1}}创建适配器扩展FragmentStatePagerAdapter
和getItem
内部的适配器返回相应的position
。比将适配器设置为Fragment
,现在您可以在ViewPager
中滑动并访问视图。
答案 1 :(得分:1)
我同意@yupi。拥有3个片段而不是3个活动会简单得多。 "您将来可以维护代码"。
在Home活动中设置此代码后,您必须为(SettingFragment,ScanItemFragment和MainContentFragment)创建片段类。您可以将现有布局从现有活动移动到片段的布局。由于活动和片段之间的生命周期不同,您将不得不进行一些修改,但它不应该花费太多时间。
此代码应该完全帮助您开始尝试实现的目标。祝你好运!
public class HomeActivity extends AppCompatActivity {
private SectionPageAdapter mSectionPageAdapter;
private ViewPager mViewPager;
private TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
// Create the adapter that returns a fragment for each tab
mSectionPageAdapter = new SectionPageAdapter(getSupportFragmentManager());
//Set up the view pager with different section adapters
mViewPager = (ViewPager) findViewById(R.id.contentFrameLayout);
mViewPager.setOffscreenPageLimit(3);
mViewPager.setAdapter(mSectionPageAdapter);
mViewPager.setPagingEnabled(false);
//Set up the tab layout to display tabs
tabLayout = (TabLayout) findViewById(R.id.homeTabs);
tabLayout.setupWithViewPager(mViewPager);
//add icons to tabs and change the text behavior
for (int i = 0; i< tabLayout.getTabCount(); i++) {
TabLayout.Tab mTab = tabLayout.getTabAt(i);
if (mTab != null) {
switch (i){
case 0:
mTab.setIcon(R.drawable.icon_zero);
break;
case 1:
mTab.setIcon(R.drawable.icon_one);
break;
case 2:
mTab.setIcon(R.drawable.icon_two);
break;
default:
break;
}
}
}
}
/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the tabs.
*/
private class SectionPageAdapter extends FragmentPagerAdapter {
SectionPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return (MainContentFragment.newInstance());
case 1:
return (ScanItemFragment.newInstance());
case 2:
return (SettingFragment.newInstance());
default:
break;
}
return (null);
}
@Override
public int getCount() {
return 3;
}
}
}