在 ViewPager 中使用 android:onclick
Posted
技术标签:
【中文标题】在 ViewPager 中使用 android:onclick【英文标题】:Using android:onlick within ViewPager 【发布时间】:2013-02-17 18:37:48 【问题描述】:我已经实现了一个 ViewPager,其中包含 3 个片段和每个片段中的许多复选框。在我使用的 xml 布局中
android:onclick="onCheckboxClicked"
在每个片段中,我实现了一个检查复选框状态的方法:
public void onCheckboxClicked(View view)
boolean checked = ((CheckBox) view).isChecked();
switch(view.getId())
case R.id.cb_one:
if (checked)
Toast.makeText(getActivity(), "cb_one checked", Toast.LENGTH_SHORT).show();
else
Toast.makeText(getActivity(), "cb_one unchecked", Toast.LENGTH_SHORT).show();
break;
case R.id.cb_two:
// ...
好吧,这实际上不起作用,因为每次我选择一个复选框时应用程序都会崩溃。
E/AndroidRuntime(29283): java.lang.IllegalStateException: 在视图类 android.widget 的 onClick 处理程序的活动类 com.testApp.SomeFragmentActivity 中找不到方法 onCheckboxClicked(View) .CheckBox 带有 id 'cb_one'
我找不到合适的解决方案来让它运行。
有什么建议吗?我将不胜感激。
【问题讨论】:
【参考方案1】:不支持您尝试执行的操作。查看this answer 了解一些解决方法。
【讨论】:
【参考方案2】:你说你把它放在片段中,但你提供的异常文本说它正在一个名为 com.testApp.SomeFragmentActivity 的 activity 中寻找它。
【讨论】:
是的,所以唯一的解决方案是在活动内部实现方法? :(【参考方案3】:最好使用 setOnCheckedChangeListener 而不是 onClickListener 来处理复选框
这里是示例代码
public class MyFragment extends Fragment implements CompoundButton.OnCheckedChangeListener
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
CheckBox checkboxFirst = rootView.findViewById(R.id.checkbox_first);
checkboxFirst.setOnCheckedChangeListener(ViewpagerFragmentFirst.this);
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked)
case R.id.checkbox_first:
if (isChecked)
// Do something
Log.i(TAG, "onCheckedChanged: Checked");
else
// Do something
Log.i(TAG, "onCheckedChanged: Unchecked");
break;
【讨论】:
以上是关于在 ViewPager 中使用 android:onclick的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中使用 TabLayout 和 ViewPager2