首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextWatcher片段

TextWatcher片段
EN

Stack Overflow用户
提问于 2022-06-27 12:00:34
回答 1查看 31关注 0票数 -1

我得到了这个java文件:

代码语言:javascript
复制
package com.example.tabbedapp;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;

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

public class Fragment1 extends Fragment {

    protected TextView ulamekLabel;
    protected EditText licznik;
    protected EditText mianownik;
    protected TextView kUlamkowa;
    protected TextView calosci;
    protected TextView nLicznik;
    protected TextView nMianownik;
    protected TextView kreska;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        licznik.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                skracamy();
            }
        });

        mianownik.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                skracamy();
            }
        });

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

    private void skracamy() {
        if (TextUtils.isEmpty((CharSequence) licznik) || TextUtils.isEmpty((CharSequence) mianownik)) {
            calosci.setText("0");
            calosci.setVisibility(View.INVISIBLE);
            nLicznik.setText("0");
            nLicznik.setVisibility(View.INVISIBLE);
            nMianownik.setText("0");
            nMianownik.setVisibility(View.INVISIBLE);
            kreska.setVisibility(View.INVISIBLE);
            return;
        }

        int a = Integer.parseInt(licznik.getText().toString());
        int b = Integer.parseInt(mianownik.getText().toString());

        int l = (a / NWD(a, b));//.toString().toInt();
        int m = (b / NWD(a, b));//.toString().toInt();

        int c = (l / m);//.toString().toInt();
        int d = (l % m);//.toString().toInt();

        calosci.setVisibility(View.VISIBLE);
        nLicznik.setVisibility(View.VISIBLE);
        nMianownik.setVisibility(View.VISIBLE);
        kreska.setVisibility(View.VISIBLE);

        if (c != 0 && d != 0) {
            calosci.setText(c);
            nLicznik.setText(d);
            nMianownik.setText(m);
        } else if (d != 0) {
            calosci.setText("");
            nLicznik.setText(d);
            nMianownik.setText(m);
        } else {
            calosci.setText(c);
            nLicznik.setText("0");
            nMianownik.setText("0");
        }
    }

    int NWD(int a, int b)
    {
        if(b!=0)
            return NWD(b,a%b);
        return a;
    }
}

并且经常调试,我得到了一个错误:Attempt to invoke virtual method 'void android.widget.TextView.addTextChangedListener(android.text.TextWatcher)' on a null object reference。我正在处理一个片段,所以我不能使用findViewById()。有人能帮忙吗?我只需要将视图分配给指针,例如。kreska = findViewById(R.id.kreska),但表示片段。我对java很陌生。这个文件实际上是从Kotlin翻译到java,从main_activity转换到片段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-27 12:11:08

您声明了视图,但忘记了初始化它们。

所有视图都未初始化,这就是显示空对象引用的原因

声明

代码语言:javascript
复制
protected EditText licznik;
protected EditText mianownik;

吲哚化

代码语言:javascript
复制
licznik = findViewById(R.id.ID1);
mianownik = findViewById(R.id.ID2);

onCreateView内部的充气和返回视图

代码语言:javascript
复制
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.YOUR_FRAGMENT, container, false);
    return view;
}

onViewCreated中的初始化视图

代码语言:javascript
复制
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);
  licznik = view.findViewById(R.id.ID1);
  mianownik = view.findViewById(R.id.ID2);

  ...
}

onCreateView中初始化视图时,您可能会遇到一些崩溃,因为有时视图没有被正确初始化。因此,始终在onViewCreated中初始化视图。

在onCreateView(android.view.LayoutInflater、android.view.ViewGroup、android.os.Bundle)返回后立即调用,但在任何保存状态恢复到视图之前调用。这样,一旦子类知道自己的视图层次结构已经完全创建,就有机会初始化它们自己。但是,此时片段的视图层次结构并不附加到其父对象上。

onViewCreated是一个确保视图完全创建的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72771734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档