Невозможно отобразить тост во фрагменте - PullRequest
0 голосов
/ 05 октября 2018

Здесь я добавил файл Java и Xml, в котором я просто хочу отобразить тост, когда пользователь нажимает кнопку.

Это просто для проверки, работает ли фрагмент или нет.

Здесь onClickListener не работает для меня во фрагменте.Даже setText на TextView не работал, когда я пытался.Я думаю, что есть некоторая проблема с компонентами или некоторая проблема между соединением 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>

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

В 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();


                }
            });
        }

    }

Спасибо!

0 голосов
/ 05 октября 2018

Вам нужно вернуть

return RootView;

, а для Тост вы должны написать

getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getContext(), "Whatever you want here", Toast.LENGTH_SHORT).show();
        }
    });
0 голосов
/ 05 октября 2018

Вы устанавливаете прослушиватель щелчка для кнопки, которая никогда не отображается.

Вам нужно вернуть rootView вместо того, чтобы надувать другое представление.

return rootView;
...