方法“onCheckboxClicked(android.view.view)”从未使用过
谢谢你们的帮助 现在我已经更新了我的代码,里面没有错误。但是当我运行应用程序时,当我试图滑动到这个片段时,它崩溃了。此代码中是否缺少任何内容,或者是我的应用程序中的其他内容导致了此问题方法“onCheckboxClicked(android.view.view)”从未使用过,android,checkbox,fragment,Android,Checkbox,Fragment,谢谢你们的帮助 现在我已经更新了我的代码,里面没有错误。但是当我运行应用程序时,当我试图滑动到这个片段时,它崩溃了。此代码中是否缺少任何内容,或者是我的应用程序中的其他内容导致了此问题 package hej.swipeview; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; impor
package hej.swipeview;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
public class FörstängningFragment extends Fragment {
int checkOne = '0';
int checkTwo = '0';
int checkThree = '0';
ImageView bild = (ImageView)
getView().findViewById(R.id.forstangningimage);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_forstangning, container, false);
bild = (ImageView) rootView.findViewById(R.id.forstangningimage);
bild.setImageResource(R.drawable.forstangning);
CheckBox c = (CheckBox) rootView.findViewById(R.id.checkboxbak);
CheckBox c2 = (CheckBox) rootView.findViewById(R.id.checkBox2);
CheckBox c3 = (CheckBox) rootView.findViewById(R.id.checkBox3);
c.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean checked = ((CheckBox) v).isChecked();
switch (v.getId()) {
case R.id.checkboxbak:
if (checked) {
checkOne = '1';
changeImage();
} else {
checkOne = '0';
changeImage();
}
break;
}
onClick(v);
}
});
c2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean checked = ((CheckBox) v).isChecked();
switch (v.getId()) {
case R.id.checkBox2:
if (checked) {
checkTwo = '1';
changeImage();
} else {
checkTwo = '0';
changeImage();
}
break;
}
onClick(v);
}
});
c3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean checked = ((CheckBox) v).isChecked();
switch (v.getId()) {
case R.id.checkBox3:
if (checked) {
checkThree = '1';
changeImage();
} else {
checkThree = '0';
changeImage();
}
break;
}
onClick(v);
}
});
changeImage();
{
if (checkOne != '1' && checkTwo != '1' && checkThree != '1') {
bild.setImageResource(R.drawable.forstangning);
} else {
if (checkOne == '1') {
bild.setImageResource(R.drawable.splash2);
} else if (checkOne == '1' && checkTwo == '1' && checkThree == '0') {
bild.setImageResource(R.drawable.dimensioner);
} else if (checkOne == '1' && checkTwo == '1' && checkThree == '1') {
bild.setImageResource(R.drawable.lastmonster);
} else if (checkOne == '1' && checkTwo == '0' && checkThree == '1') {
bild.setImageResource(R.drawable.ic_launcher);
} else if (checkOne == '0' && checkTwo == '1' && checkThree == '0') {
bild.setImageResource(R.drawable.ic_launcher);
} else if (checkOne == '0' && checkTwo == '1' && checkThree == '1') {
bild.setImageResource(R.drawable.ic_launcher);
} else if (checkOne == '0' && checkTwo == '0' && checkThree == '1') {
bild.setImageResource(R.drawable.ic_launcher);
}
}
}
return rootView;
}
private void changeImage() {
}
}
确保您的复选框已启动,并且在片段中有一个setOnClickListenerthis
在onCreateView中,应该有类似的内容:
CheckBox c = (CheckBox) rootView.findViewById(R.id.chkName);
c.setOnClickListener(this);
public class FragmentName extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_pick, container, false);
CheckBox c = (CheckBox) rootView.findViewById(R.id.chkName);
c.setOnCheckedChangeListener(this);
}
}
因此,您的`片段现在应该类似于此:
CheckBox c = (CheckBox) rootView.findViewById(R.id.chkName);
c.setOnClickListener(this);
public class FragmentName extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_pick, container, false);
CheckBox c = (CheckBox) rootView.findViewById(R.id.chkName);
c.setOnCheckedChangeListener(this);
}
}
然后使片段覆盖片段内的setOnClickListener:
@Override
public void onClick(View view) {
// Your code here
}
或者,确保在布局xml文件中设置了android:onClick属性:
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New CheckBox"
android:onClick="onCheckboxClicked"
android:id="@+id/checkBox"
android:layout_weight="1"
android:clickable="true" />
正如斯特肯特从
要定义按钮的单击事件处理程序,请在XML布局中的元素中添加android:onClick属性。此属性的值必须是要调用以响应单击事件的方法的名称。然后,承载布局的活动必须实现相应的方法
从 我的重点是:
要定义按钮的单击事件处理程序,请在XML布局中的元素中添加android:onClick属性。此属性的值必须是要调用以响应单击事件的方法的名称。然后,承载布局的活动必须实现相应的方法
因此,onCheckboxClicked方法需要由宿主活动实现,而不是由片段实现。如果这听起来愚蠢,它是,你应该考虑不使用XML OnCout属性为此原因。相反,您可以在片段代码中以编程方式设置侦听器。您的问题是试图在片段中设置onclick侦听器。由于片段存在于活动中,因此不能在片段类中隐式启动方法并在xml上声明它。 要使用代码,只需执行以下步骤- 1.在返回infalted视图之前初始化所有片段xml视图 2.在返回膨胀视图之前和膨胀相关视图之后设置方法,即- PS-
将您为创建的onClick方法指定的名称更改为其他名称,否则在侦听器中重写的方法的命名与您创建的方法的命名将发生冲突。显示调用此函数的代码?是否在布局文件中的复选框上设置了onClick xml属性?是的,我已将所有复选框设置为:android:onClick=onCheckboxClicked@ElinAndersson查看我的最新答案我已经这样做了,但它仍然说:从来没有使用过“onClickandroid.view.view”方法。@ElinAndersson您应该查看下面stkent的答案。如果在片段视图中使用onClick属性,则应在父活动中重写onClickView视图方法。为了避免这种情况,请使用我的第一个建议,这对我来说是使用片段的首选方法