【问题标题】:Unable to Display Toast in Fragment无法在片段中显示 Toast
【发布时间】:2018-10-05 02:18:29
【问题描述】:

在这里,我添加了 Java 和 Xml 文件,我只想在用户单击按钮时在其中显示一个 Toast。

这只是为了检查 Fragment 是否工作。

这里的 onClickListener 在 Fragment 中不适合我。当我尝试时,甚至 TextView 上的 setText 也不起作用。我认为组件有问题,或者 java 和 xml 文件的连接有问题

Setting.java

    package com.example.dell.jsonexp;

    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;

    public class setting extends Fragment {
        BackgroundTask b;
    String e;
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View RootView = inflater.inflate(R.layout.setting, container, false);

            final Button logout= (Button) RootView.findViewById(R.id.logout);
            logout.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    Toast.makeText(getActivity(),"Button Pressed",Toast.LENGTH_LONG).show();


                }
            });

            return inflater.inflate(R.layout.setting, container, false);
        }


    }

setting.xml

        <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="match_parent">

        <Button
            android:id="@+id/logout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="50dp"
            android:text="Logout" />
    </RelativeLayout>

【问题讨论】:

    标签: java android xml fragment


    【解决方案1】:

    您正在为一个从未显示的按钮设置点击侦听器。

    您需要返回 rootView 而不是膨胀另一个视图。

    return rootView;
    

    【讨论】:

      【解决方案2】:

      Fragment 中,您无法在onCreateView() 方法中访问视图组件,您必须使用Override onViewCreated() 方法。 请更新您的代码如下。

          package com.example.dell.jsonexp;
      
          import android.content.Context;
          import android.content.Intent;
          import android.content.SharedPreferences;
          import android.os.Bundle;
          import android.support.annotation.Nullable;
          import android.support.v4.app.Fragment;
          import android.view.LayoutInflater;
          import android.view.View;
          import android.view.ViewGroup;
          import android.widget.Button;
          import android.widget.TextView;
          import android.widget.Toast;
      
          public class setting extends Fragment {
              BackgroundTask b;
              String e;
      
              @Override
              public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
      
                  return inflater.inflate(R.layout.setting, container, false);
              }
      
              @Override
              public void onViewCreated(View view, Bundle savedInstanceState) {
                  super.onViewCreated(view, savedInstanceState);
      
                  Button logout= (Button) view.findViewById(R.id.logout);
                  logout.setOnClickListener(new View.OnClickListener() {
      
                      @Override
                      public void onClick(View v) {
                          Toast.makeText(getActivity(),"Button Pressed",Toast.LENGTH_LONG).show();
      
      
                      }
                  });
              }
      
          }
      

      谢谢!

      【讨论】:

        【解决方案3】:

        你需要返回

        return RootView;
        

        对于 Toast 你必须写

        getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getContext(), "Whatever you want here", Toast.LENGTH_SHORT).show();
                }
            });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-29
          • 2021-11-04
          相关资源
          最近更新 更多