【问题标题】:Android TabLayout Fragment communicationAndroid TabLayout Fragment 通信
【发布时间】:2023-03-18 16:09:01
【问题描述】:

来自 com.android.support:design:22.2.0 我已经实现了TabLayout

我有一个香草片段,其中 3 个在 TabLayout 中。

public class MyFragment extends Fragment impliments SyncInfo.SyncInfo {
    ....
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        ....
    }

    @Override
    public void synced() {
        //refresh some info in the fragment!
    }
}

此外,我还实现了一个 FragmentPagerAdapter 来管理 tabLayout。

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private String tabTitles[] = new String[] { "Tab1", "Tab2", "Tab3" };
    private Context context;

     public SampleFragmentPagerAdapter(FragmentManager fm, Context context) {
        super(fm);
     }

    @Override
    public int getCount() {
         return PAGE_COUNT;
    }

    @Override
    public Fragment getItem(int position) {
        switch(position){
            case 0:
                 return new MyFragment();
            case 1:
                 return new MyFragment2();
            default:
                 return new MyFragment3();
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles[position];
    }
}

现在在 MainActivity:

public class MainActivity extends AppCompatActivity{
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        viewPager.setAdapter( new   FragmentPagerAdapterApp(getSupportFragmentManager(), this) );


        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.setupWithViewPager(viewPager);
        ....
     }

接下来,我定义了一些 Asynctask,在 Asynctask 的 onPostExecute 中,我想实现一种根据需要与每个片段进行通信的方法。

public class SyncInfo extends AsyncTask<Void, Void, Void> {
   private final SyncResponse syncResponse;

   public SyncInfo(Context context...) {
       ....
        syncResponse = (SyncResponse) context;
    }

   @Override
   protected Void doInBackground(Void... voids) {
      ...
   }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        progressDialog.dismiss();
        syncResponse.synced();
    }

    public interface SyncResponse{
        void synced();
    }
}

我尝试通过 AsyncTask 中定义的接口来实现这一点,并在片段中实现了方法,但这不起作用。有没有人对如何在使用 FragmentPageAdapter 创建的片段中传递信息/触发方法有任何想法?

【问题讨论】:

    标签: android android-fragments android-asynctask android-viewpager android-design-library


    【解决方案1】:

    我之前也遇到过类似的问题,最终我使用了事件总线解决方案,例如 Square 的 Otto。他们在存储库中有一个示例应用程序。

    或者,您可以使用 Android 内置的BroadcastReceiver 在片段之间进行通信。

    【讨论】:

    • 谢谢,在这种情况下实现一些更强大的解决方案是有意义的。我会去看看 Otto,它似乎最适合快速阅读文档(在我的情况下)。
    猜你喜欢
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多