【问题标题】:How to access data from a textview in a fragment Android studio如何从片段 Android 工作室中的文本视图访问数据
【发布时间】:2020-09-15 02:21:52
【问题描述】:

大家好,我的应用程序的 mainActivity 布局只是一个巨大的片段。我计划使用共享首选项来确定我想首先开始哪个片段。一切都很好但是我无法从我的片段文本视图中访问数据。它将显示为空。这是我的主要活动课

   SessionManager session;




   /**
    * The starting point of the app.
    * @param savedInstanceState
    */
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       this.gestureDetector = new GestureDetector(MainActivity.this,this);
       session = new SessionManager(getApplicationContext());




       if (session.isLoggedIn()) {
           FirstFragment frag = new FirstFragment();
           FragmentTransaction f = getSupportFragmentManager().beginTransaction();
           f.add(R.id.flFragment, frag);
           f.commit();
           Toast.makeText(MainActivity.this, session.getUserDetails().get("name") + " is logged in ", Toast.LENGTH_SHORT).show();

       } else {
           LoginFragment frag = new LoginFragment();
           FragmentTransaction f = getSupportFragmentManager().beginTransaction();
           f.add(R.id.flFragment, frag);
           f.commit();
       }


   }


   /**
    * button onclick event listener
    * @param v
    */
   public void loginButton(View v) {
       LoginFragment frag = new LoginFragment();
       session.createLoginSession(frag.userName.getText().toString()); \\ null pointer happens here
   }

这是来自我的 LoginFragment 类的代码

    MaterialEditText userName, password;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_login, container, false);
        userName = view.findViewById(R.id.user_name);
        return view;
    }




我也尝试在我的 mainActivitys onCreate 中使用 findviewbyId 初始化 userName,但它仍然为空

【问题讨论】:

    标签: android android-studio android-fragments


    【解决方案1】:

    在您的loginButton() 方法中,您正在创建一个全新的LoginFragment 实例,它没有引用显示给用户的登录片段。这是错误的。

    相反,您应该将登录按钮单击的处理程序放置在实际的 LoginFragment 中,如下所示:

    public void loginButton(View v) {
           getActivity().getSession().createLoginSession(this.userName.getText().toString());
       }
    

    这里假设布局资源文件中的按钮包含android:onClick="loginButton"

    当然这意味着Activity需要创建getter方法getSession()来返回会话。这并不理想...您可以将会话作为构造函数参数传递给更干净的 Fragment。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      相关资源
      最近更新 更多