我遇到了片段中按钮的连接方法的问题。它不起作用。。。当我点击一个按钮时,我的应用程序总是关闭的。在正常活动中,它可以正常工作,但为什么不能在碎片中工作呢?我该如何修复?
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="green"
android:text="@string/green" />
和
View rootview;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootview = inflater.inflate(R.layout.menu1_layout, container, false);
return rootview;
}
我的方法是绿色
public void green(View v){
//here everything is good
}
导入android.view.view.OnClickListener;标记为"从未使用过"
您不能这样做,因为没有"活动"就没有对片段的上下文引用。因此,这只可能发生在活动中,而不是片段中。这里需要注意的重要一点是,您的Fragment必须调用getActivity()来查找对上下文的引用,因为片段可以放置在任何活动片段中。片段本身实际上没有上下文,因此在这方面不可能在xml中引用Fragment的方法。
直接从Android:
公共静态最终intonClick添加到API 4 中
单击视图时要调用的此视图上下文中的方法的名称。此名称必须对应于只接受一个View类型参数的公共方法。例如,如果您指定android:onClick="sayHello";,您必须声明上下文(通常是您的活动)的公共void sayHello(Viewv)方法。
必须是字符串值,使用"\;"以转义unicode字符的字符,如"\n"或"\uxxxx"。
这也可能是对包含该类型值的资源(形式为"@[package:]type:name")或主题属性(形式为"?[package=][type:]name")的引用。
常数值:16843375(0x0101026f)
更新
那就用这个吧:
Button button = (Button) getView().findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Move your green(View v) method logic here instead of calling green(v)
}
});
更新2
你的片段代码应该在做其他事情之前先做这件事:
public class menu1_fragment extends Fragment {
View rootview;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootview = inflater.inflate(R.layout.menu1_layout, container, false);
return rootview;
}
// Probably safer for you to use onViewCreated(View, Bundle)
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
// use rootView or getView()
Button button = (Button) rootView.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Move your green(View v) method logic here instead of calling green(v)
}
});
}
}
在视图膨胀之前不能引用UI元素,这是导致错误的原因。或者,您可以使用 onActivityCreated(Bundle savedInstanceState)
。