私はFragmentのメソッドにアクセスするのに本当に面倒な問題がありました。私はAndroid StudioからMainActivityのフラグメントメソッドにアクセス
プロセスだ
エラー:com.crelix.crelix、PID:18913 のjava.lang.NullPointerException:「無効com.crelix.crelix.ClickerFragment.refreshViewsを仮想メソッドを呼び出そうと() 'null nullオブジェクト参照の場合 com.crelix.crelix.NavigationActivity.Refresh(NavigationActivity.java:530) com.crelix.crelix.NavigationActivity $ 1 $ 1.run(NavigationActivity.java:84) android.os。 Handler.handleCallback(Handler.java:810) android.os.Handler.dispatchMessage( java.lang.reflect.Method.invokeでandroid.app.ActivityThread.mainでandroid.os.Looper.loop(Looper.java:189) (ActivityThread.java:5529) (AT Handler.java:99) ネイティブメソッド) (java.lang.reflect.Mava.372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:950) at com.android.internal .os.ZygoteInit.main(ZygoteInit.java:745)
マイ・フラグメント例:
package com.crelix.crelix;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.w3c.dom.Text;
public class ClickerFragment extends Fragment {
public static ClickerFragment newInstance() {
ClickerFragment fragment = new ClickerFragment();
return fragment;
}
public ClickerFragment() {
}
private TextView MoneyText;
private TextView MoneyPerTapTView;
private TextView BoxesText;
private TextView BoxesPerTapTView;
private ProgressBar progressBar;
MainHolder Main = new MainHolder();
public void refreshViews(){
MoneyText.setText("Money: " +Main.Money[0]);
MoneyPerTapTView.setText("$ " + Main.Money[1] + " per tap");
BoxesText.setText("Boxes: " + Main.Boxes[0] + "/100");
BoxesPerTapTView.setText("Points " + Main.Boxes[1] + " per tap");
progressBar.setProgress(Main.Boxes[0]);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_clicker, container, false);
MoneyText = (TextView) rootView.findViewById(R.id.MoneyText);
MoneyPerTapTView = (TextView) rootView.findViewById(R.id.MoneyPerTapTView);
BoxesText = (TextView) rootView.findViewById(R.id.BoxesText);
BoxesPerTapTView = (TextView) rootView.findViewById(R.id.BoxesPerTapTView);
progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar);
return rootView;
}
}
そして、私は次のようにMainActivityからアクセスしたい:私はあなたの中にこれを行うことができ
ClickerFragment ClickerFragment = (ClickerFragment) getSupportFragmentManager()
.findFragmentById(R.id.frame_container);
[NullPointerExceptionとは何か、それを修正するにはどうすればよいですか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –
この問題は、フラグメントが表示されているか、要素がまだ作成されていません。さらに明確にするために、フラグメントのライフサイクルを見てください。しかし、その要点は、refreshViewを呼び出そうとしているときにonCreateViewがまだ起動していない可能性が最も高いです。 – aminner
@Manzaが編集されました。 ;) – trakasi