2016-11-28 57 views
0

我正在使用NavigationDrawer作爲菜單,並且菜單上的每個項目都有一個片段,例如我有一個主菜單,其中包含homefragemnt.xml和homefragment.java,因此在xml文件中有一個textview我想用MainActivity.java 更改textviews值並用下面的代碼:TextView t1 = (TextView) findViewById(R.id.changetxt);t1.setText("ChangedText"); changetxt是在homefragment.xml文件 TextView的的ID,但這個代碼給出一個運行時錯誤說Attempt to invoke virtual method on a null object reference. 是什麼原因造成的問題我如何解決它?如何在MainActivity.java中編輯碎片佈局TextView?

+0

你能發表整個代碼嗎? – fsnasser

+0

我害怕我不能,我現在沒有我的代碼,你可以問我你是否想知道任何東西 – surafel

+0

你不應該從Activity中訪問Fragment的視圖。您通常應該要求Fragment實例更新其視圖。 –

回答

1

您將不得不從片段視圖中獲取textview的引用而不是活動。 您在片段的onCreateView中膨脹的視圖。

@Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view=inflater.inflate(R.layout.myview,container,false); 

    TextView t1 = (TextView) view.findViewById(R.id.changetxt);t1.setText("ChangedText"); 
     return view; 
    } 

這裏的視圖是片段被初始化的視圖。

this鏈接將幫助您

+0

是的,我也試過,但它不工作,當我在模擬器上運行的應用程序,它會給出錯誤 – surafel

+0

只是在模擬器上?請只要你可以發佈代碼 –

+0

是的只是在emulator.i會發布代碼,當我可以感謝您的支持 – surafel

0

片段:

公共類MyFragment擴展片段{

TextView t1; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_main, container, false); 
    t1 = (TextView) view.findViewById(R.id.changetxt); 
    return view; 
} 

public void setTextViewText(String value){ 
    t1.setText(value); 
} 

}

活動:

myFragment.setTextView( 「ChangedText」 );

希望它可以幫助你。