android - 从 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
解决方案
创建一个接口以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 中调用它。
推荐阅读
- payara - cargo-maven3-plugin Payara auth-realm
- javascript - 通过信使获取参与我的页面的人的自定义标签
- verilog - 我不明白为什么“a [2]”到“a [7]”不是“无输出依赖于输入引脚”
- sql - Postgresql 条件脚本
- javascript - 在 React.js 中,TMDB API 返回相同的数据
- javascript - 减少柏林噪声纹理中的平铺
- node.js - TypeORM - 获取冲突中的现有 ID
- linux - PhysicalFileProvider 是否应该在没有轮询的情况下在 Linux 上工作
- c++ - 重载运算符的多个定义符号
- android - Jetpack Compose 时间间隔