1

アクティビティには 2 つのフラグメントがあります。actionbarsherlock TabNavigation を実装しており、各タブには個別のフラグメントがあります。ネットワーク操作を実行しており、結果をTextView.

現在のフラグメントが完全にロードされた後にフラグメントを変更すると、正常に動作します。現在のNullPointerExceptionフラグメントがまだロードされている間にフラグメントを変更した場合にのみ発生します。助けてください。

フラグメント 1:

public class Fragment1 extends SherlockFragment {

public static Fragment1 newInstance() {
    Fragment1 f = new Fragment1 ();
    return f;
}

private static LinearLayout mainll;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub4

    final View V = inflater.inflate(R.layout.fragment_1, container, false);

    AsyncHttpClient client = new AsyncHttpClient();
    client.get(((MainActivity) act).getUrl(), new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            Document document = Jsoup.parse(response);

            Element results = document.getElementById("search_results");

            mainll = (LinearLayout) V.findViewById(R.id.content);

            LayoutParams mainllParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            mainllParams.setMargins(10, 5, 0, 0);

            if(results != null) {
                TextView tv= new TextView(getActivity());  //NPE occurs here
                tv.setLayoutParams(mainllParams);
                tv.setText(results.ownText());
                tv.setGravity(Gravity.CENTER_HORIZONTAL);
                mainll.addView(tv);
            }
    });

    return V;
}
}

フラグメント 2:

public class Fragment2 extends SherlockFragment {

public static Fragment2 newInstance() {
    Fragment2 f = new Fragment2 ();
    return f;
}

private static LinearLayout mainll;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub4

    final View V = inflater.inflate(R.layout.fragment_1, container, false);

    AsyncHttpClient client = new AsyncHttpClient();
    client.get(((MainActivity) act).getUrl(), new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            Document document = Jsoup.parse(response);

            Element results2 = document.getElementById("more_results");

            mainll = (LinearLayout) V.findViewById(R.id.content);

            LayoutParams mainllParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            mainllParams.setMargins(10, 5, 0, 0);

            if(results2 != null) {
                TextView tv2 = new TextView(getActivity());  //NPE Occurs here
                tv2.setLayoutParams(mainllParams);
                tv2.setText(results.ownText());
                tv2.setGravity(Gravity.CENTER_HORIZONTAL);
                mainll.addView(tv2);
            }
    });

    return V;
}
}

前もって感謝します

4

1 に答える 1

3

さて、あなたはすでにあなた自身の質問に答えています: 現在のフラグメントが切り離された状態にあるため、NPE が発生します。これは、アクティビティから切り離され、リンクがないことを意味します ->getActivity()戻りますnull

チェックにいくつかの追加オプションを追加して、フラグメントがまだ表示され、添付されていることを確認できます。

if(results2 != null && getActivity()!=null && isVisible()) {
            TextView tv2 = new TextView(getActivity());  //NPE Occurs here
            tv2.setLayoutParams(mainllParams);
            tv2.setText(results.ownText());
            tv2.setGravity(Gravity.CENTER_HORIZONTAL);
            mainll.addView(tv2);
        }
于 2013-06-03T08:00:52.517 に答える