You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法修改CalendarFragment中TextView内容的技术求助

解决CalendarFragment中TextView文本不更新的问题

核心问题分析

问题出在CalendarFragment的onCreateView方法里:你先填充了一个布局实例并修改了TextView的文本,但最后返回的是重新填充的全新布局实例,之前对TextView的修改根本没被显示出来。

修复后的代码

修改CalendarFragment.java的onCreateView方法,返回你已经修改过的view对象即可:

import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class CalendarFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_calendar, container, false);
        TextView welcomeMessage = view.findViewById(R.id.welcomeBackTitle);
        
        // 增加非空判断避免空指针异常
        if (GlobalVariable.first_name != null) {
            welcomeMessage.setText("Welcome back " + GlobalVariable.first_name + "!");
        }
        
        // 返回已经修改过的view,而非重新inflate的新布局
        return view;
    }
}

额外优化建议

  1. 全局变量替代方案
    使用静态类存储用户名不是Android的最佳实践,建议改用SharedPreferences做持久化存储,APP重启后数据不会丢失:
// 存储用户名(在输入用户名的Activity中)
SharedPreferences prefs = getSharedPreferences("AppPrefs", MODE_PRIVATE);
prefs.edit().putString("username", inputUsername).apply();

// 获取用户名(在CalendarFragment中)
SharedPreferences prefs = requireContext().getSharedPreferences("AppPrefs", MODE_PRIVATE);
String username = prefs.getString("username", "Guest");
  1. 规范的Fragment数据传递
    如果需要从Activity向Fragment传递数据,更推荐通过Bundle传递,提升Fragment的独立性:
// 在Activity中创建Fragment时传递参数
CalendarFragment fragment = new CalendarFragment();
Bundle args = new Bundle();
args.putString("username", username);
fragment.setArguments(args);

// 在Fragment中获取参数
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_calendar, container, false);
    TextView welcomeMessage = view.findViewById(R.id.welcomeBackTitle);
    
    String username = getArguments().getString("username", "Guest");
    welcomeMessage.setText("Welcome back " + username + "!");
    
    return view;
}

内容的提问来源于stack exchange,提问作者Stotox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:46:08