我在練習使用Java/XML
的Android編程。當我使用setText方法時,我的Android程序崩潰
至於以下代碼:我遇到麻煩的方法是OBClicked
。
OBClicked
是我在ShareFragment中定義的接口(包含複選框和啓動TextFragment的按鈕)中的方法。
我這樣做是因爲根據我所瞭解的,在片段中定義接口並覆蓋宿主活動中的接口是一種很好的方法,可以將該信息傳輸到另一個片段。
在這種情況下,我重寫MainActivity中的OBClicked
方法來告訴TextFragment(它只是一個TextView)是否檢查了ShareFragment中的CheckBox。根據是否選中,我嘗試告訴TextFragment使用setText顯示某些文本,但是這會使程序崩潰。這裏的代碼,任何幫助將不勝感激。 :
MainActivity:
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;
}
}
ShareFragment:
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;
}
}
TextFragment:
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屬於誰?對活動或片段? – Blackbelt