-2
我想更改我的TextView
元素的文本,該元素在相應的QuoteFragment.class
文件和相關的layout.xml
文件中定義。你可以看到該方法的代碼在我的主要活動:NPE片段文本字段 - 爲什麼?
private void forwardToQuoteFragment(Quote quote){
quoteFragment = QuoteFragment.newInstance(quote);
View view = quoteFragment.getView();
TextView tv = (TextView) view.findViewById(R.id.quoteFragmentHeader);
tv.setText("Quote (" + quote.getId() + "): " + quote.getQuote());
android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, quoteFragment);
ft.commit();
}
我調試告訴我,該視圖變量爲空,所以我得到了一個NPE。它會使沒有什麼區別,如果我在QuoteFragment.class
創建的視圖屬性,你可以看到如下:
public class QuoteFragment extends android.support.v4.app.Fragment {
public static final String QUOTE_FRAGMENT_TAG = "QuoteFragment";
public static final String QUOTE_ID = "quoteId";
private View view;
private long quoteId;
public QuoteFragment(){
// required
}
// factory to set arguments
public static QuoteFragment newInstance(Quote quote) {
QuoteFragment fragment = new QuoteFragment();
Bundle args = new Bundle();
args.putLong(QUOTE_ID, quote.getId());
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(Context context){
super.onAttach(context);
Log.i(QUOTE_FRAGMENT_TAG, "onAttach()");
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.i(QUOTE_FRAGMENT_TAG, "onCreate()");
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
view = inflater.inflate(R.layout.fragment_quote, container, false);
return view;
}
public void setQuoteId(long id){
this.quoteId = id;
}
public long getQuoteId() {
return quoteId;
}
public View getView(){
return this.view;
}
}
什麼是解決這一問題的最佳方法是什麼?我忽略了什麼?
謝謝 - 我會試試看。 我想如果TextView標記在layout.xml中,它會被創建?! 無論如何,我不知道你的方法是否能解決我的問題,因爲我得到了這些信息,哪些文本應該打印在我的MainActivity中,而不是我的Fragment中。這就是爲什麼我想從我的活動中的Fragment中獲取TextView並調用相應的setter方法的原因。 – Jochen
獲得'Qoute'最簡單的方法是將'Bundle'作爲一個'String',放在'newInstance()'方法中創建:'args.putString(QUOTE_QUOTE,quote.getQoute() );' – Steve2955
或者你可以通過使用[Parcelable](https://developer.android.com/reference/android/os/Parcelable.html)並將整個'Qoute'放入Bundle作爲'Parcelable' – Steve2955