2016-11-28 59 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” );

希望它可以帮助你。