如何从活动中更改片段的textView文本

Cԃա*_*ԃաԃ 29 android textview android-fragments

我找不到如何textview从一个改变片段Activity.我有4个文件:

MainActivity.java
activity_main.xml
FragmentClass.java
frag_class.xml
Run Code Online (Sandbox Code Playgroud)

frag_class.xml有textView,我想从MainActivity.java更改文本.FragmentClass扩展了Fragment,这个片段显示在MainActivity FragmentClass中:

public void changeText(String text){
 TextView t = (TextView) this.getView().findViewById(R.id.tView);
 t.setText(text);
}
Run Code Online (Sandbox Code Playgroud)

在MainActivity中我尝试了这个:

FragmentClass fc = new FragmentClass();
fc.changeText("some text");
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,这段代码给了我NullPointerException,fc.changeText("some text"); 我也尝试直接从MainActivity更改文本:

 TextView t = (TextView) this.getView().findViewById(R.id.tView);
 t.setText(text);
Run Code Online (Sandbox Code Playgroud)

哪个失败了.

[编辑] 完整的代码在这里

Lal*_*ani 11

你可以通过使用找到Fragment的实例,

对于支持库,

YourFragment fragment_obj = (YourFragment)getSupportFragmentManager().
                                              findFragmentById(R.id.fragment_id);
Run Code Online (Sandbox Code Playgroud)

其他

YourFragment fragment_obj = (YourFragment)getFragmentManager().
                                             findFragmentById(R.id.fragment_id); 
Run Code Online (Sandbox Code Playgroud)

然后在Fragment中创建一个方法来更新你TextView并使用fragment_objlike 调用该方法,

fragment_obj.updateTextView();

  • ClassCastException,我的activity_main.xml中没有frament标签,我只有带有id frag的LinearLayout,我使用getSupportFragmentManager().beginTransaction().replace(R.id.frag,fr).commit(); 让片段出现 (4认同)

Dar*_*ryn 11

activityFragment通过Fragment Transaction:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 
    }
    public static void changeFragmentTextView(String s) {
        Fragment frag = getFragmentManager().findFragmentById(R.id.yourFragment);
        ((TextView) frag.getView().findViewById(R.id.textView)).setText(s);  
    }
}
Run Code Online (Sandbox Code Playgroud)


Ill*_*ent 5

@Lalit答案是正确的,但我发现你不需要创建像fragment_obj.updateTextView();这样的函数.我将所有视图设置为类级别对象,并能够直接更新textview.

fragmentRegister.textViewLanguage.setText("hello mister how do you do");
Run Code Online (Sandbox Code Playgroud)

注意:如果您需要执行多个操作,那么可以使用功能.