首页 > 解决方案 > 从 Fragments 检查 ToggleButton

问题描述

我想将 ToggleButton 与选项卡式活动一起使用。

我将 ToggleButton 添加到我的主要活动工具栏中。

如何在选项卡式片段中检查 ToggleButton?

这是我关于 mainactivity 的代码。

    public class MainActivity extends AppCompatActivity {
    private TabLayout tabLayout;
    private ViewPager viewPager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple_tabs);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new OneFragment(), "ONE");
        adapter.addFragment(new TwoFragment(), "TWO");
        viewPager.setAdapter(adapter);

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

        ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
        toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    // The toggle is enabled
                } else {
                    // The toggle is disabled
                }
            }
        });
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

一个片段:

public class OneFragment extends Fragment{

    public OneFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_one, container, false);
    }
}

编辑:我添加了 mainactivity 和 onefragment。

如何在一个片段中检查 ToggleButton?

谢谢您的帮助。

编辑2:github项目https://github.com/jrxblu/tabtestt

标签: android

解决方案


创建一个接口以ToggleButton从 Activity 中读取状态。

public interface ToggleButtonStateListener {
  boolean isChecked();
}

在 Activity 类中实现

public class MainActivity extends AppCompatActivity implements ToggleButtonStateListener {

  private TabLayout tabLayout;
  private ViewPager viewPager;
  private ToggleButton toggle;
  private OneFragment oneFragment;
  private TwoFragment twoFragment;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_simple_tabs);

    toggle = (ToggleButton) findViewById(R.id.togglebutton);
    viewPager = (ViewPager) findViewById(R.id.viewpager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    oneFragment = new OneFragment();
    oneFragment.setToggleListener(this);
    twoFragment = new TwoFragment();
    twoFragment.setToggleListener(this);

    adapter.addFragment(oneFragment, "ONE");
    adapter.addFragment(twoFragment, "TWO");
    viewPager.setAdapter(adapter);

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

    toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(oneFragment!= null) {
          oneFragment.performOnCheckOperation(isChecked);
        }
      }
    });
  }

  @Override
  public boolean isChecked() {
    return toggle.isChecked();
  }

  class ViewPagerAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
      super(manager);
    }

    @Override
    public Fragment getItem(int position) {
      return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
      return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
      mFragmentList.add(fragment);
      mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
      return mFragmentTitleList.get(position);
    }
  }
}

现在在 Fragment 类中,当您需要知道是否选中了切换时,请使用下面的代码。

public class OneFragment extends Fragment{

    private ToggleButtonStateListener listener;

    public OneFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        boolean isToggleChecked = listener.isChecked();//call to check toggle status
        Toast.makeText(getActivity(), "onCreateView: "+isToggleChecked, Toast.LENGTH_SHORT).show();
        return inflater.inflate(R.layout.fragment_one, container, false);
    }

    public void setToggleListener(ToggleButtonStateListener listener) {
        this.listener = listener;
    }

    public void performOnCheckOperation(boolean isChecked) {
        Toast.makeText(getActivity(), "performOnCheckOperation: "+isChecked, Toast.LENGTH_SHORT).show();
    }
}

两个片段

public class TwoFragment extends Fragment{

    private ToggleButtonStateListener listener;

    public TwoFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        boolean isToggleChecked = listener.isChecked();//call to check toggle status
        if(isToggleChecked) {
            Toast.makeText(getActivity(), ""+isToggleChecked, Toast.LENGTH_SHORT).show();
        }
        return inflater.inflate(R.layout.fragment_two, container, false);
    }

    public void setToggleListener(ToggleButtonStateListener listener) {
        this.listener = listener;
    }

}

如果您想在切换检查更改后立即执行任何操作。您可以在 Fragment 中创建一个方法performOnCheckOperation,并在 OnCheckedChangeListener 中调用它。


推荐阅读