在 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

如何在ViewPager中渲染单个片段?

如何使用 tabLayout 在 ViewPager 中显示片段?

如何在 viewPager 中使用按钮更改页面?

如何在 ViewPager 中使用 Fragments

如何在Android中使用viewPagerindicator和ViewPager?