31

我找不到如何textviewActivity. 我有 4 个文件:

MainActivity.java
activity_main.xml
FragmentClass.java
frag_class.xml

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

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

在 MainActivity 我试过这个:

FragmentClass fc = new FragmentClass();
fc.changeText("some text");

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

 TextView t = (TextView) this.getView().findViewById(R.id.tView);
 t.setText(text);

失败了。

[编辑] 完整代码在这里

4

5 回答 5

12

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

对于支持库,

YourFragment fragment_obj = (YourFragment)getSupportFragmentManager().
                                              findFragmentById(R.id.fragment_id);

别的

YourFragment fragment_obj = (YourFragment)getFragmentManager().
                                             findFragmentById(R.id.fragment_id); 

然后在 Fragment 中创建一个更新您的方法并使用类似TextView调用该方法,fragment_obj

fragment_obj.updateTextView();

于 2013-04-30T08:13:07.537 回答
12

activity到: Fragment_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);  
    }
}
于 2013-04-30T08:20:06.017 回答
6

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

fragmentRegister.textViewLanguage.setText("hello mister how do you do");

注意:如果您需要执行多个操作,那么拥有一个功能是可行的方法。

于 2014-06-12T06:07:50.167 回答
1

我以其他方式完成了它。我的应用程序是这样工作的:

启动我的应用程序后,我创建了带有 HomeFragment 的 MainActivity。在 HomeFragment 中,我有 Button 和 TextView 用于连接/显示 BluetoothConnection 的状态。

在 HomeFragment 中,我实现了用于从 BluetoothService 接收信息的 Handler。收到消息后,我想更新 TextView 和 Button 文本。我在 HomeFragment 中使用为 TextView 和 Button 获取字符串参数的方法创建了公共接口。在 onAttach(Activity a) 我创建了 mCallback 对象来与活动交谈。

下一步是在 MainActivity 中实现这个接口。从这个活动中,我正在更新 TextView 和 Button。一切看起来像这样:

HomeFragment.java

public interface ViewInterface{
    public void onViewUpdate(String buttonTxt, String txtTxt);
}

@Override
public void onAttach(Activity a){
    super.onAttach(a);
    try{
        mCallback = (ViewInterface)a;
    }catch (ClassCastException e){
        e.printStackTrace();
    }
}

private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

                case MESSAGE_STATE_CHANGE:

                    if(true) Log.i(CLASS_TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1);
                    switch (msg.arg1) {
                        case BluetoothConnectionService.STATE_CONNECTED:

                            threadTextString = "Connected to: " + connectedDeviceName;
                            threadBtnString = "Disconnect";
                            mCallback.onViewUpdate(threadBtnString, threadTextString);
                            break;
                        case BluetoothConnectionService.STATE_CONNECTING:
                           threadTextString = "Connecting...";
                            mCallback.onViewUpdate(threadBtnString, threadTextString);
                            break;
                         case BluetoothConnectionService.STATE_NONE:

                            threadBtnString = "Connect";
                            threadTextString = "You're not connectedd";
                            mCallback.onViewUpdate(threadBtnString, threadTextString);
                            break;
}

private void updateBtn(Button btn, String data){
    btn.setText(data);
    Log.d(CLASS_TAG + "/" + "updateBtn", "Data: " + data);
}

private void updateTxt(TextView txt, String data){
    txt.setText(data);
    Log.d(CLASS_TAG + "/" + "updateTxt", "Data: " + data);

}

public void update(String buttonTxt, String txtTxt){
    this.updateTxt(connectTxt, txtTxt);
    this.updateBtn(connectButton, buttonTxt);
}

MainActivity.java

@Override
public void onViewUpdate(String buttonTxt, String txtTxt) {
    HomeFragment homeFragment = (HomeFragment)getSupportFragmentManager().findFragmentById(R.id.frame_container);
    if(homeFragment != null){
    homeFragment.update(buttonTxt, txtTxt);
    }
}
于 2014-08-28T08:04:21.170 回答
0
public class Dcrypt extends Fragment {

Button butD;
ImageButton Dcopy;
EditText getPass;
TextView txtShow;

使用这行代码来获得文本字段的支持

private FragmentManager supportFragmentManager;
于 2017-07-10T11:35:23.557 回答