我有這個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 翻譯成片段。
uj5u.com熱心網友回復:
您宣告了視圖但忘記初始化它們。
所有視圖都未初始化,這就是顯示空物件參考的原因
宣言
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://www.uj5u.com/shujuku/496696.html
