Rin*_*tel 0 java android android-fragments android-viewpager android-fragmentactivity
我想从 MainActivity 调用 My Fragment 方法。我从这里找到了很好的解决方案。我正在学习android,所以没有太多技术知识。我的情况略有不同。我在用FragmentPagerAdapter在 MainActivity 中使用如下所示:
class ViewPagerAdapter extends FragmentPagerAdapter {\n private final List<Fragment> mFragmentList = new ArrayList<>();\n private final List<String> mFragmentTitleList = new ArrayList<>();\n\n ViewPagerAdapter(FragmentManager manager) {\n super(manager);\n }\n\n @Override\n public Fragment getItem(int position) {\n return mFragmentList.get(position);\n }\n\n @Override\n public int getCount() {\n return mFragmentList.size();\n }\n\n void addFragment(Fragment fragment, String title) {\n mFragmentList.add(fragment);\n mFragmentTitleList.add(title);\n }\n\n @Override\n public CharSequence getPageTitle(int position) {\n return mFragmentTitleList.get(position);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n和我的ViewPager如下所示:
private void setupViewPager(ViewPager viewPager) {\n ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());\n adapter.addFragment(new HomeFragment(), "HOME");\n adapter.addFragment(new AccountFragment(), "ACCOUNT");\n adapter.addFragment(new SetupFragment(), "SETUP");\n viewPager.setAdapter(adapter);\n }\nRun Code Online (Sandbox Code Playgroud)\n\n现在我想打电话给我HomeFragment从我的 MainActivity 调用我的函数。我该怎么做?
作为示例答案,我可以这样做:
\n\nExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(\xe2\x80\x9cFragTagName\xe2\x80\x9d); \nfragment.specific_function_name();\nRun Code Online (Sandbox Code Playgroud)\n\n但我不知道如何在使用时为我的片段设置标签FragmentPagerAdapter。如果有人可以帮助我解决这个问题,请告诉我。
主要活动代码:
\n\npublic class HomeActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {\n\n private ViewPager viewPager;\n private BottomNavigationView bottomNavigationView;\n Toolbar toolbar;\n private DrawerLayout mDrawerLayout;\n private ActionBarDrawerToggle mDrawerToggle;\n private ListView mDrawerList;\n\n\n @Override\n protected void onCreate(@Nullable Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_home);\n ButterKnife.bind(this);\n\n toolbar = findViewById(R.id.toolbar);\n setSupportActionBar(toolbar);\n getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n\n mDrawerLayout = findViewById(R.id.drawer_layout);\n mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close);\n mDrawerToggle.syncState();\n Activity mActivity = this;\n\n viewPager = findViewById(R.id.viewpager);\n bottomNavigationView = findViewById(R.id.bottomNavigationView);\n bottomNavigationView.setOnNavigationItemSelectedListener(this);\n\n\n //\n mDrawerList = findViewById(R.id.left_drawer);\n DrawerItem[] drawerItem = new DrawerItem[4];\n drawerItem[0] = new DrawerItem(R.drawable.compare, "Compare");\n drawerItem[1] = new DrawerItem(R.drawable.on, "Notification");\n drawerItem[2] = new DrawerItem(R.drawable.support, "Support");\n drawerItem[3] = new DrawerItem(R.drawable.news, "News");\n DrawerItemCustomAdapter adapter = new DrawerItemCustomAdapter(this, R.layout.list_drawer, drawerItem);\n mDrawerList.setAdapter(adapter);\n mDrawerList.setOnItemClickListener(new DrawerItemClickListener());\n\n\n //\n\n\n setupViewPager(viewPager);\n viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {\n @Override\n public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {\n\n }\n\n @Override\n public void onPageSelected(int position) {\n if (position == 0) {\n bottomNavigationView.setSelectedItemId(R.id.menuHome);\n } else if (position == 1) {\n bottomNavigationView.setSelectedItemId(R.id.menuAccount);\n } else {\n bottomNavigationView.setSelectedItemId(R.id.menuSetup);\n }\n }\n\n @Override\n public void onPageScrollStateChanged(int state) {\n\n }\n });\n\n SharedPreferences pref = mActivity.getSharedPreferences("setting", MODE_PRIVATE);\n int membership = pref.getInt("membership", 1);\n if (membership == 0) {\n if (!HomeActivity.this.isFinishing()) {\n AlertManager.createCallbackAlert(mActivity, "Warning", "Trial expired if premium not purchased your account history will be deleted in 1 days", false, "OK", new DialogInterface.OnClickListener() {\n @Override\n public void onClick(DialogInterface dialog, int which) {\n dialog.dismiss();\n }\n }, "BUY", new DialogInterface.OnClickListener() {\n @Override\n public void onClick(DialogInterface dialog, int which) {\n dialog.dismiss();\n viewPager.setCurrentItem(1);\n }\n });\n }\n }\n }\n\n @Override\n public void onActivityResult(int requestCode, int resultCode, Intent data) {\n super.onActivityResult(requestCode, resultCode, data);\n }\n\n private void setupViewPager(ViewPager viewPager) {\n ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());\n adapter.addFragment(new HomeFragment(), "HOME");\n adapter.addFragment(new AccountFragment(), "ACCOUNT");\n adapter.addFragment(new SetupFragment(), "SETUP");\n viewPager.setAdapter(adapter);\n }\n\n @Override\n public boolean onNavigationItemSelected(@NonNull MenuItem item) {\n switch (item.getItemId()) {\n case R.id.menuHome:\n viewPager.setCurrentItem(0);\n\n break;\n case R.id.menuAccount:\n viewPager.setCurrentItem(1);\n\n break;\n case R.id.menuSetup:\n\n viewPager.setCurrentItem(2);\n break;\n }\n\n\n return true;\n }\n\n\n\n class ViewPagerAdapter extends FragmentPagerAdapter {\n private final List<Fragment> mFragmentList = new ArrayList<>();\n private final List<String> mFragmentTitleList = new ArrayList<>();\n\n ViewPagerAdapter(FragmentManager manager) {\n super(manager);\n }\n\n @Override\n public Fragment getItem(int position) {\n return mFragmentList.get(position);\n\n }\n\n @Override\n public int getCount() {\n return mFragmentList.size();\n\n }\n\n void addFragment(Fragment fragment, String title) {\n mFragmentList.add(fragment);\n mFragmentTitleList.add(title);\n }\n\n @Override\n public CharSequence getPageTitle(int position) {\n return mFragmentTitleList.get(position);\n }\n }\n\n private boolean bIsBackPressed = false;\n\n public void onBackPressed() {\n\n if (!bIsBackPressed) {\n if (this.mDrawerLayout.isDrawerOpen(GravityCompat.START)) {\n this.mDrawerLayout.closeDrawer(GravityCompat.START);\n } else {\n Toast.makeText(this, "Press Back again to exit", Toast.LENGTH_SHORT)\n .show();\n bIsBackPressed = true;\n new Thread(new Runnable() {\n public void run() {\n try {\n Thread.sleep(2000);\n } catch (Exception pE) {\n Log.e("BackPressed Error", Log.getStackTraceString(pE));\n }\n bIsBackPressed = false;\n }\n }).start();\n }\n } else\n finish();\n }\n\n @Override\n public boolean onOptionsItemSelected(MenuItem item) {\n\n if (mDrawerToggle.onOptionsItemSelected(item))\n return true;\n\n\n return super.onOptionsItemSelected(item);\n }\n\n\n\n private class DrawerItemClickListener implements ListView.OnItemClickListener {\n\n @Override\n public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\n selectItem(position);\n\n }\n\n }\n\n private void selectItem(int position) {\n\n\n switch (position) {\n case 0:\n Toast.makeText(HomeActivity.this,"Clicked",Toast.LENGTH_SHORT).show();\n break;\n case 1:\n changeNotification();\n /*Intent i = new Intent(Intent.ACTION_VIEW);\n i.setData(Uri.parse(constant.URL_PRIVACY));\n startActivity(i);*/\n break;\n case 2:\n startActivity(new Intent(HomeActivity.this, SupportActivity.class));\n break;\n /*Intent web = new Intent(Intent.ACTION_VIEW);\n web.setData(Uri.parse(constant.URL));\n startActivity(web);*/\n case 3:\n startActivity(new Intent(HomeActivity.this, NewsActivity.class));\n break;\n\n default:\n break;\n }\n mDrawerLayout.closeDrawer(mDrawerList);\n\n\n }\n\n public void changeNotification() {\n final Dialog dialog = new Dialog(HomeActivity.this);\n // dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // before\n dialog.setContentView(R.layout.dialog_change_sound);\n dialog.setCancelable(true);\n\n WindowManager.LayoutParams lp = new WindowManager.LayoutParams();\n lp.copyFrom(dialog.getWindow().getAttributes());\n lp.width = WindowManager.LayoutParams.WRAP_CONTENT;\n lp.height = WindowManager.LayoutParams.WRAP_CONTENT;\n RecyclerView rvSounds = dialog.findViewById(R.id.rvSounds);\n rvSounds.setLayoutManager(new LinearLayoutManager(dialog.getContext()));\n rvSounds.setAdapter(new SoundsAdapter(dialog.getContext()));\n\n dialog.findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View v) {\n dialog.dismiss();\n }\n });\n\n dialog.findViewById(R.id.btnCancel).setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View v) {\n dialog.dismiss();\n }\n });\n\n dialog.show();\n dialog.getWindow().setAttributes(lp);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我想在行中添加方法:
\n\ncase 0: \n Toast.makeText(HomeActivity.this,"Clicked",Toast.LENGTH_SHORT).show();\n break;\nRun Code Online (Sandbox Code Playgroud)\n\n谢谢。
\n在您的活动顶部添加ViewPagerAdapter pagerAdapter;
然后用它来创建您的 ViewPager 适配器
pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
Run Code Online (Sandbox Code Playgroud)
然后用它来访问ViewPager的第一页
Fragment fragment = pagerAdapter.getItem(0);
Run Code Online (Sandbox Code Playgroud)
首先确保上面的语句返回不为 null 并且该片段是 HomeFragment。现在将片段投射到您的 HomeFragment 并调用该方法
((HomeFragment) fragment).yourMethod();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2731 次 |
| 最近记录: |