【问题标题】:Listen on Switch state change in Tab / Android在 Tab / Android 中监听 Switch 状态变化
【发布时间】:2015-02-15 20:34:27
【问题描述】:

如何识别 Tab 中的 Switch 是否改变了状态? 我用自己的 Class 进行了尝试,但我不知道应该扩展它们。我想,如果方向改变,我也可以将类用作存储。 Here is a Screenshot of my Application.

HomecontrolFragment.java

public class HomecontrolFragment extends Fragment {
private SlidingTabLayout mSlidingTabLayout;
private ViewPager mViewPager;
private String tabNames[] = {"General", "basement", "ground-floor", "first-floor", "heating"};

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_homecontrol, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
    mViewPager.setAdapter(new SamplePagerAdapter());
    mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
    mSlidingTabLayout.setViewPager(mViewPager);
}

class SamplePagerAdapter extends PagerAdapter {
    public int getCount() {
        return tabNames.length;
    }

    public boolean isViewFromObject(View view, Object o) {
        return o == view;
    }

    public CharSequence getPageTitle(int position) {
        System.out.write(position);
        return tabNames[position];
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view;
        switch (position) {
            case 0:
                view = GeneralTabFragment.getInstance(getActivity(), container);
                break;
            case 1:
                view = getActivity().getLayoutInflater().inflate(R.layout.pager_basement, container, false);
                break;
            case 2:
                view = getActivity().getLayoutInflater().inflate(R.layout.pager_groundfloor, container, false);
                break;
            case 3:
                view = getActivity().getLayoutInflater().inflate(R.layout.pager_firstfloor, container, false);
                break;
            default:
                view = getActivity().getLayoutInflater().inflate(R.layout.pager_item,
                        container, false);
                TextView title = (TextView) view.findViewById(R.id.item_title);
                title.setText(String.valueOf(position + 1));
                break;
        }

        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}}

我自己的视图/布局类

public class GeneralTabFragment extends View implements CompoundButton.OnCheckedChangeListener{
private static View instance = null;
Switch lightSwitch = (Switch) findViewById(R.id.general_light_switch);

public GeneralTabFragment(Context context) {
    super(context);
}

public static View getInstance(Activity activity, ViewGroup container){
    if (instance == null)
    {
        instance = activity.getLayoutInflater().inflate(R.layout.pager_general, container, false);
    }
return instance;
}

布局

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="@dimen/activity_horizontal_margin"
    android:paddingEnd="8dp">

    <Switch
        android:id="@+id/general_light_switch"
        android:layout_width="fill_parent"
        android:layout_height="48dp"
        android:text="@string/light" />

    <View
        android:layout_width="fill_parent"
        android:layout_marginTop="8dp"
        android:layout_height="1dp"
        android:background="@color/separator" />

    <Switch
        android:layout_width="fill_parent"
        android:layout_height="48dp"
        android:layout_marginTop="8dp"
        android:text="@string/heating" />

</LinearLayout>

【问题讨论】:

    标签: android switch-statement fragment listener


    【解决方案1】:

    您可以在 Fragment 中使用OnCheckedChangeListener on switch

    lightSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // do something based on isChecked
         }
    });
    

    要在 Fragment 之外的某处传递此事件,您可以使用 Otto

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 1970-01-01
      • 2015-05-23
      • 2017-05-31
      • 2021-02-17
      • 2021-06-16
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多