如何处理片段中的onClick [重复]
Posted
技术标签:
【中文标题】如何处理片段中的onClick [重复]【英文标题】:How to Handle onClick in Fragments [duplicate] 【发布时间】:2016-06-02 17:08:43 【问题描述】:这是我第一次尝试 Fragments,但我无法处理 android:onClick
我的片段 XML 中有一个按钮,如下所示
<Button
android:layout_
android:layout_
android:text="@string/save_keywords_button"
android:id="@+id/save_keywords"
android:layout_marginTop="340dp"
android:background="#FF2E7D32"
android:textColor="#FFFFFF"
android:typeface="normal"
android:onClick="myLogic" />
我搜索了很多结果,无法找到处理 onClick 事件的确切解决方案。
我的问题是,如何获取按钮的 ID 并编写 myLogic 方法。 FindViewById() 不能在片段中工作,我应该在哪里编写该方法? 在片段或我的活动中?
【问题讨论】:
访问此链接developer.android.com/tools/data-binding/… 【参考方案1】:更好的方法是在片段类中实现OnClickListener
,并在片段中覆盖onCreateView
,在片段中将侦听器分配给按钮。
通过在 XML 布局中添加 onClick
属性,加载时您的活动将在活动中查找元素,而不是在片段中。这将引发异常。
我建议阅读一些片段活动层次结构,以了解何时可以访问片段中的元素。
public class StartFragment extends Fragment implements OnClickListener
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View v = inflater.inflate(R.layout.fragment_start, container, false);
Button b = (Button) v.findViewById(R.id.save_keywords);
b.setOnClickListener(this);
return v;
@Override
public void onClick(View v)
switch (v.getId())
case R.id.save_keywords:
...
break;
参考来自:here
【讨论】:
【参考方案2】:android:onClick="myLogic"
不会在片段内调用方法myLogic
。请改用OnClickListener
来处理此类事件。
请参阅以下参考资料
Best way to implement View.OnClickListener in android
http://developer.android.com/reference/android/view/View.OnClickListener.html
【讨论】:
【参考方案3】:如果您需要在 fragmen 中查看视图,您只能在调用 onCreateView()
后执行此操作 getView().findViewById(R.id.foo);
。如果您在 xml 中指定 onClick
,则无需在程序中编写任何指向该方法的链接,只需在您的活动中实现该方法即可。
【讨论】:
如您所说,我在主 Activity 中编写了一个方法“public void myLogic(View v)”,但是当我单击按钮 java.lang.IllegalStateException: 找不到方法 myLogic 时出现此错误(视图)在视图类 android.support.v7.widget.AppCompatButton 上定义的 android:onClick 属性的父或祖先上下文中,id 为“save_keywords” @Uday 我们需要您的片段和活动的代码来查看问题所在。手动设置 onclick 监听器是个好主意。如果你在代码中拼错了你的方法名,它不会被调用。【参考方案4】:尝试添加方法
public void myLogic(View v)
【讨论】:
将其添加到我的 mainActivity 中,并在点击按钮时出现此错误 无法在视图类 android.support.v7 上定义的 android:onClick 属性的父上下文或祖先上下文中找到方法 myLogic(View)。 id 为“save_keywords”的 widget.AppCompatButton以上是关于如何处理片段中的onClick [重复]的主要内容,如果未能解决你的问题,请参考以下文章