【发布时间】:2014-01-15 07:55:11
【问题描述】:
我正在练习使用Java/XML 的Android 编程。
至于下面的代码:我遇到问题的方法是OBClicked。
OBClicked 是我在 ShareFragment 中定义的接口中的一个方法(其中包含一个复选框和一个启动 TextFragment 的按钮)。
我这样做是因为据我所知,在片段中定义一个接口并在托管活动中覆盖该接口是一种可以将该信息传输到另一个片段的好方法。
在这种情况下,我重写了 MainActivity 中的 OBClicked 方法来告诉 TextFragment(它只是一个 TextView)是否检查了 ShareFragment 中的 CheckBox。根据是否检查,我尝试告诉 TextFragment 使用 setText 显示某些文本,但这会使程序崩溃。这是代码,任何帮助将不胜感激。 :
主活动:
public class MainActivity extends FragmentActivity implements ShareFragment.ClickListener{
@Override
public void oBClicked(boolean x){
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
TextView t = (TextView)findViewById(R.id.text_view);
if(x == true){
t.setText("The box is checked");
}else{
t.setText("The box isn't checked");
}
Fragment fragment = new TextFragment();
ft.replace(R.id.fragmentContainer, fragment);
ft.addToBackStack(null);
ft.commit();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
if(fragment == null){
fragment = new ShareFragment();
}
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragmentContainer, fragment);
ft.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
共享片段:
public class ShareFragment extends Fragment {
Button mButton;
String mText;
Boolean mTruthValue;
CheckBox mCheckBox;
private int mCounter;
//CROSS FRAGMENT COMMUNICATION START
ClickListener mListener;
public interface ClickListener{
public void oBClicked(boolean x);
}
public void oBClicked(boolean x){
mListener.oBClicked(x);
}
//CROSS FRAGMENT COMMUNICATION FIN
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
try{
mListener = (ClickListener) activity;
}
catch(Exception e){
//
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle save){
View v = inflater.inflate(R.layout.fragment_share, container, false);
mButton = (Button)v.findViewById(R.id.button1);
mCheckBox = (CheckBox)v.findViewById(R.id.check_box);
mCounter = 1;
mCheckBox.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
mCounter++;
}
});
mButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
//mCheckBox = (CheckBox)v.findViewById(R.id.check_box);
if(mCounter%2 == 0){
mTruthValue = true;
}else{
mTruthValue = false;
}
oBClicked(mTruthValue);
}
});
return v;
}
}
文本片段:
public class TextFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle save){
View v = inflater.inflate(R.layout.fragment_text, container, false);
return v;
}
}
【问题讨论】:
-
堆栈跟踪中是否有异常/错误?
-
请显示您的 LogCat 的内容
-
请帮我理解一下,R.id.text_view 属于谁?到活动还是到片段?
标签: java android eclipse view android-fragments