1

上部に3つのタブがあり、それぞれが異なるビューにリンクしているメモ帳アプリを作成しようとしています。

最初の2つのタブには記入するフォームが含まれ、3番目のタブには実際の書き込みが行われます。問題は、この3番目のビューを膨らませようとすると、次の行でnullポインター例外が発生することです。

((LinearLayout) findViewById(R.id.drawRoot)).addView(v,0);

これが私のコードです:

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, show the tab contents in the container
    Fragment fragment = new Section3Fragment();
    Bundle args = new Bundle();
    args.putInt(Section3Fragment.ARG_SECTION_NUMBER, tab.getPosition() + 1);
    fragment.setArguments(args);
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container3, fragment)
            .commit();
}


public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}


public  class Section3Fragment extends Fragment {
    public Section3Fragment() {
    }

    int section;
    public static final String ARG_SECTION_NUMBER = "section_number";

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

        Bundle args = getArguments();
       section = args.getInt(ARG_SECTION_NUMBER);
       View view;

       if (section == 1)
       {
            view = inflater.inflate(R.layout.section3_page1, container,false);

           return view;
       }
       if (section == 2){

        view = inflater.inflate(R.layout.section3_page2, container, false);
        return view;
       }
       else {


            if(v != null)
                Log.v("not null", "not null");

            view = inflater.inflate(R.layout.section3_page3, container, false);
            ((LinearLayout) findViewById(R.id.drawRoot)).addView(v,0); //null pointer exception here!!


           return view;

       }
    }
}

オブジェクトvは、実際の描画を行うために使用するクラスのインスタンスです。

そしてsection3_page3レイアウトファイル

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawRoot"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
</LinearLayout>

この問題についての洞察は大歓迎です。

4

3 に答える 3

2

一目で、あなたはやろうとしていますか?

 ((LinearLayout) view.findViewById(R.id.drawRoot)).addView(v,0);

フラグメントのビューを探しています。ifステートメント内で膨らませたビューではありません。

于 2012-07-09T15:47:34.623 に答える
1

section3_page3.xmlを投稿しましたが、を開きinflater.inflate(R.layout.section3_page2, container, false)ます。これはタイプミスですか、それとも問題の根本的な原因ですか?

間違ったXMLファイルを開くと、findViewById()はここでnullを返します。

view = inflater.inflate(R.layout.section3_page2, container, false);
((LinearLayout) findViewById(R.id.drawRoot)).addView(v,0);

したがって、NullPointerException...あなたが意味したと思います:

view = inflater.inflate(R.layout.section3_page3, container, false);
((LinearLayout) findViewById(R.id.drawRoot)).addView(v,0);
于 2012-07-09T15:47:37.147 に答える
1

ActionBarとFragmentsを使用しているので、これを変更することをお勧めします。

((LinearLayout) findViewById(R.id.drawRoot)).addView(v,0);

これに:

((LinearLayout) getActivity().findViewById(R.id.drawRoot)).addView(v,0);
于 2012-07-09T15:57:31.597 に答える