我得到了这个java文件:
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转换到片段。
发布于 2022-06-27 12:11:08
您声明了视图,但忘记了初始化它们。
所有视图都未初始化,这就是显示空对象引用的原因
声明
protected EditText licznik;
protected EditText mianownik;吲哚化
licznik = findViewById(R.id.ID1);
mianownik = findViewById(R.id.ID2);onCreateView内部的充气和返回视图
@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中的初始化视图
@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是一个确保视图完全创建的方法。
https://stackoverflow.com/questions/72771734
复制相似问题