繁体   English   中英

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

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

你好,我是 android studio 的新手,我刚刚创建了我的片段,想创建一个随机化数字的按钮。 它在我做片段之前就工作了,现在我根本不知道如何输入我以前使用的相同代码但是..它似乎没有找到我的文本视图或按钮的 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)));
            }
        });


    }
}

这与@Mike 所说的答案相同。 Fragment 的生命周期方法与 Activity 的生命周期方法不同,您可以从此处获取更多信息。

OnCreateOnCreateView之前调用,因此您无法访问OnCreate方法内的片段视图。 移动你在OnViewCreated所做的一切。 所以你的片段代码将是

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)));
            }
        });

    }
}

您的代码应该在 onCreateView() 内。 在这里,它应该是什么样子的。

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;
    }

}

我希望这有效,对我有用。 祝你好运! ☺️

暂无
暂无

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

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