简体   繁体   English

如何将数据传递到我的片段中以显示我的视图?

[英]How can i pass data into my fragments to my view?

hello im new to android studio I just created my fragments and want to create a button that randomizes a number.你好,我是 android studio 的新手,我刚刚创建了我的片段,想创建一个随机化数字的按钮。 it worked before i did the fragments and now i simply doesnt know how to get in the same code i used before but.. it doesnt seem to find the id of my text view or my button它在我做片段之前就工作了,现在我根本不知道如何输入我以前使用的相同代码但是..它似乎没有找到我的文本视图或按钮的 ID

package com.example.thesapplikation;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import java.util.Random;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class RandomFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView (LayoutInflater inflater, @Nullable  ViewGroup container,@Nullable Bundle savedInstanceState) {

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

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Random myRandom = new Random();

        Button buttonGenerate = (Button) findViewById(R.id.generate);
        final TextView textGenerateNumber=(TextView)findViewById(R.id.generatenumber);

        buttonGenerate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textGenerateNumber.setText(String.valueOf(myRandom.nextInt(100)));
            }
        });


    }
}

It's same answer as @Mike said.这与@Mike 所说的答案相同。 Fragment's life cycle methods are different then that of an Activity, you can get more info from here . Fragment 的生命周期方法与 Activity 的生命周期方法不同,您可以从此处获取更多信息。

OnCreate is called before the OnCreateView so you dont have access to the fragment's view inside the OnCreate method. OnCreateOnCreateView之前调用,因此您无法访问OnCreate方法内的片段视图。 Move everything you doing inside OnViewCreated .移动你在OnViewCreated所做的一切。 So your fragment code will be所以你的片段代码将是

public class RandomFragment extends Fragment {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView (LayoutInflater inflater, @Nullable  ViewGroup container,@Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_home,container,false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Button buttonGenerate = (Button) view.findViewById(R.id.generate);
        final TextView textGenerateNumber=(TextView)view.findViewById(R.id.generatenumber);

        final Random myRandom = new Random();
        buttonGenerate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textGenerateNumber.setText(String.valueOf(myRandom.nextInt(100)));
            }
        });

    }
}

Your code should be inside onCreateView().您的代码应该在 onCreateView() 内。 Here, what it should look like to work.在这里,它应该是什么样子的。

public class RandomFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView (LayoutInflater inflater, @Nullable  ViewGroup container,@Nullable Bundle savedInstanceState) {

        final Random myRandom = new Random();

        View root = inflater.inflate(R.layout.fragment_home,container,false);

        Button buttonGenerate =  root.findViewById(R.id.generate);
        final TextView textGenerateNumber = root.findViewById(R.id.generatenumber);

        buttonGenerate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textGenerateNumber.setText(String.valueOf(myRandom.nextInt(100)));
            }
        });

        return root;
    }

}

I hope this works, works for me BTW.我希望这有效,对我有用。 Best of luck!祝你好运! ☺️ ☺️

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM