0

でデフォルトのタブ付きアクティビティを作成しましたandroid studio。そして、tab1 と tab2 を使用して 2 つのビューを表示しようとしました。それらは LinearLayout を継承します。以下はそのコードです(Tab1)。

public class Tab1 extends LinearLayout {
    View rootView;

    public Tab1(Context context) {
        super(context);
        init(context);
    }

    public Tab1(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    //inflater
    private void init(Context context) {
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        rootView = inflater.inflate(R.layout.fragment_main_tab1, this, true);
    }

    public View getView(){ //getter
        return rootView;
    }
}

これがonCreateViewデフォルトで作成したメソッドですtabbed activity。各タブにtab1、tab2を表示したかった。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView; //return view
    Tab1 tab1 = new Tab1(StaticManager.applicationContext); //inflated activity
    Tab2 tab2 = new Tab2(StaticManager.applicationContext); //inflated activity

    if (getArguments().getInt(ARG_SECTION_NUMBER) == 1) {
        container.addView(tab1);
        rootView = tab1.getRootView();
    } else {
        container.addView(tab2);
        rootView = tab2.getRootView();
    }
    return rootView;
}

エラーメッセージはこれです、

05-06 14:36:57.972 19264-19264/kr.eyeballs.mobilecloudchattingapp E/AndroidRuntime: FATAL EXCEPTION: main
05-06 14:36:57.972 19264-19264/kr.eyeballs.mobilecloudchattingapp E/AndroidRuntime: Process: kr.eyeballs.mobilecloudchattingapp, PID: 19264
05-06 14:36:57.972 19264-19264/kr.eyeballs.mobilecloudchattingapp E/AndroidRuntime: java.lang.StackOverflowError

うまくいきません。これを修正するにはどうすればよいですか?

意味がわからない場合は、お知らせください。さらに情報を追加します。

4

1 に答える 1

1

間違ったメソッドを呼び出した場合は、フラグメントgetView()の代わりに呼び出す必要があります。getRootView()コードの平和によりViewGroup、スタックオーバーフローが発生します。

   /**
     * @hide
     */
    @Override
    public void resetResolvedLayoutDirection() {
        super.resetResolvedLayoutDirection();

        int count = getChildCount();
        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.isLayoutDirectionInherited()) {
                child.resetResolvedLayoutDirection();
            }
        }
    }
于 2016-05-06T06:47:08.340 に答える