我有片段中按钮的连接方法的问题。 它不起作用...当我点击一个按钮时,我的应用程序总是关闭。 在正常活动中,它可以正常工作,但为什么不在碎片中?我该怎么说呢?
<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
}
import android.view.View.OnClickListener;被标记为“从未使用过”
答案 0 :(得分:1)
你不能这样做,因为没有活动就没有对片段的上下文引用。因此,这只能在活动而不是片段中实现。这里要注意的重要一点是你的Fragment必须调用getActivity()来查找对上下文的引用,因为一个片段可以放在任何Activity片段中,它们本身没有上下文所以在这里引用Fragment的方法是不可能的。尊重。
直接来自Android:
在API 4中添加了public static final int onClick
单击视图时要调用的此View上下文中的方法的名称。此名称必须对应于只接受View类型的一个参数的公共方法。例如,如果指定android:onClick =“sayHello”,则必须声明上下文的公共void sayHello(View v)方法(通常是您的Activity)。
必须是字符串值,使用'\;'转义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)
}
});
}
}
在View膨胀之前,您无法引用UI元素,这是导致错误的原因。或者,您可以使用onActivityCreated(Bundle savedInstanceState)
。