谢谢大家的帮助!
现在我已经更新了我的代码,并且没有错误。但是当我运行应用程序时,当我尝试滑动到这个片段时,它会崩溃。这段代码中是否有任何遗漏或者我的应用程序中的其他内容导致此问题?
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() {
}
}
答案 0 :(得分:0)
确保您的checkboxes
已启动并且setOnClickListener(this)
内有Fragment
。
在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);
}
}
然后在片段中让你片段Override
setOnClickListener
:
@Override
public void onClick(View view) {
// Your code here
}
或者确保在layout 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" />
指出的那样
要为按钮定义click事件处理程序,请将android:onClick属性添加到XML布局中的元素。此属性的值必须是要响应click事件而调用的方法的名称。 托管布局的活动必须实现相应的方法。
答案 1 :(得分:0)
来自http://developer.android.com/guide/topics/ui/controls/button.html#HandlingEvents(我的重点):
要为按钮定义click事件处理程序,请将android:onClick属性添加到XML布局中的元素。此属性的值必须是要响应click事件而调用的方法的名称。 托管布局的活动必须实施相应的方法。
因此,您的onCheckboxClicked
方法需要由托管活动实施,而不是片段。如果这听起来很愚蠢,那么,出于这个原因你应该考虑 not 使用xml onClick属性。相反,您可以在Fragment代码中以编程方式设置侦听器。
答案 2 :(得分:0)
您的问题是您正在尝试在片段中设置onclick侦听器。由于片段“存在”活动中,因此您无法隐式启动片段类中的方法并在xml上声明它。
要使用您的代码,只需按照以下步骤操作 -
1.在返回infalted视图之前,初始化所有片段xml视图
2.在返回膨胀视图之前设置方法,并在膨胀相关视图之后设置方法,即 -
@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 OnClickListener() {
@Override
public void onClick(View v) {
onClick(v);//THIS IS THE METHOD YOU WROTE ON THE ATTACHED CODE!!
}
});
c2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onClick(v);//THIS IS THE METHOD YOU WROTE ON THE ATTACHED CODE!!
}
});
c3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onClick(v);//THIS IS THE METHOD YOU WROTE ON THE ATTACHED CODE!!
}
});
return rootView;
}
PS - 将您创建的onClick方法的名称更改为其他名称,否则您将在侦听器中的覆盖方法的命名和您创建的方法中发生冲突。