【问题标题】:Change the Text of a Textview with Edittext?使用 Edittext 更改 Textview 的文本?
【发布时间】:2020-03-12 19:00:55
【问题描述】:

嘿,我如何在 Android Studio 中做到这一点?

我想在 Edittext 中输入一些内容(它位于 Activity 中扩展 AppCompatActivity),如果我单击保存,此文本将显示在另一个 Textview 中(位于另一个类中扩展 Fragments)?

AccountActivity.java:

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_account);

final EditText editText = (EditText) findViewById(R.id.usernameedittext);
TextView save = (TextView) findViewById(R.id.profile_save);

save.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(AccountActivity.this, ProfileFragment.class);
        intent.putExtra("name", editText.getText().toString());
        startActivity(intent);
    }
});

ProfileFragment.java:

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


    final TextView username = (TextView) view.findViewById(R.id.profile_username);

    username.setText(getActivity().getIntent().getExtras().getString("name")) }

【问题讨论】:

标签: java android android-studio


【解决方案1】:

您可以使用保存按钮单击方法上的活动数据发送广播,并在片段中接收该广播,并从广播意图中获取数据并将其显示在视图中。

编辑:请在下面找到发送和接收广播的示例。

首先,在ProfileFragment.java中,创建一个广播类:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals("my_broadcast")){
            final TextView username = (TextView) view.findViewById(R.id.profile_username);
            username.setText(intent.getStringExtra("name"));
        }
    }
}

并创建MyBroadcastReceiver 的类级实例

MyBroadcastReceiver myReceiver = new MyBroadcastReceiver();

并添加此代码

@Override
public void onResume() {
    super.onResume();
    getActivity().registerReceiver(myReceiver, new IntentFilter("my_broadcast"));
}

@Override
public void onPause() {
    super.onPause();
    getActivity().unregisterReceiver(myReceiver);
}

最后,当你想更新文本时,你必须发送广播。 所以,在你的AccountActivity.java 类中,将你的点击方法更新为

save.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent broadcastIntent = new Intent();
                    broadcastIntent.setAction("my_broadcast");
                    broadcastIntent.putExtra("name", editText.getText().toString());
                    sendBroadcast(broadcastIntent);
    }
});

希望这会有所帮助。祝你好运!

【讨论】:

  • 嘿,我该如何编码?我是初学者,我不知道它是如何工作的:P
  • 您好,很抱歉回答迟了。这段代码对我不起作用。 final TextView username = (TextView) view.findViewById(R.id.profile_username); 在这一行。 “视图”总是有问题。总是这个错误“错误:找不到符号变量视图”
  • @FloFlo 你需要做一点改动,请把fragment的onCreateView中的view变量设为全局类变量。
  • 我这样做也对吗? final TextView 用户名 = (TextView) ((Activity) context).findViewById(R.id.profile_username); 但如果我这样做,如果我在 Edittext 中键入内容,Textview 也不会改变跨度>
  • 不,这不起作用,因为您指的是父活动的上下文来查找视图,但是您必须做的是,使用片段的视图在该视图中调用 findViewById。因此,只需将您在 onCreateView 中膨胀的视图更改为类变量并在广播中使用它。
【解决方案2】:

您可以将 textView 设为静态变量并对其进行引用,然后在设置时将值设为 null 以防止内存泄漏

【讨论】:

    【解决方案3】:

    就像@Massab 所说的那样。您可以将广播从一个班级发送到另一个班级。 以下是如何做到这一点的答案: How to send and receive broadcast message 并从 android-studio 回答: https://developer.android.com/guide/components/broadcasts

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 2014-03-05
      • 1970-01-01
      相关资源
      最近更新 更多