1

Androidフラグメントの学習を始めたばかりです。次のプログラムがクラッシュする理由を教えてください。

1 つのアクティビティには 2 つのフラグメントが含まれ、各フラグメントには表示するボタンが 1 つだけあります。私はHead First Android Developmentの例に従おうとしました...しかし:(

フラグメントを含むアクティビティ

public class FragmentsContainer extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragmentscontaineractivity);
    }
}

フラグメントコンテナのレイアウト

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <fragment
            android:name="com.example.nasaimage.ImageOne"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <fragment
            android:name="com.example.nasaimage.ImageTwo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="2" />
    </LinearLayout>

最初のフラグメントとレイアウト

 public class ImageOne extends Fragment {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        }

        @Override
        public View onCreateView(LayoutInflater inflater,
                ViewGroup container, Bundle savedInstanceState) {
            return inflater.inflate(R.layout.imageoneactivity, container, false);
        }
   }

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

2 番目のアクティビティとレイアウト

 public class ImageTwo extends Fragment {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        }

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

             View view =  inflater.inflate(R.layout.imagetwoactivity, container, false);

                Button button = (Button) view.findViewById(R.id.button1);
                button.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {

                  }
                });
                return view;
        }
    }


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    </LinearLayout>
4

2 に答える 2

4

なぜこのアプローチを使用しているのですか。使用できるよりスマートなアプローチがあります...ボタン、メニューオプション、またはナビゲーションドロワーアイテムを押した後、フラグメントは次のように呼び出すことができます:

FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager
                    .beginTransaction();
            FragmentExcel fragmentS1 = new FragmentExcel();
            fragmentTransaction.replace(R.id.content_frame, fragmentS1);
            fragmentTransaction.commit();

次に、フラグメント クラスは次のようになり、特定の機能を持つ 3 つのボタンがあります。

public class FragmentExcel extends Fragment {    
    Button buttonCat, buttonBudg, buttonExpense;
    DBHelper db;

    public static Fragment newInstance(Context context) {
        FragmentHistory f = new FragmentHistory();    
        return f;
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {    
        if (container == null) {
            return null;
        }

        RelativeLayout mLinearLayout = (RelativeLayout) inflater.inflate(
                R.layout.fragment_excel, container, false);

        db = new DBHelper((getActivity().getBaseContext()));

        buttonCat = (Button) mLinearLayout.findViewById(R.id.buttonCategoies);
        buttonBudg = (Button) mLinearLayout.findViewById(R.id.buttonBudgets);
        buttonExpense = (Button) mLinearLayout
                .findViewById(R.id.buttonExpenses);

        buttonCat.setOnClickListener(new View.OnClickListener() {    
            @Override
            public void onClick(View v) {
                db = new DBHelper((getActivity().getBaseContext()));
                String tableName = "categories";
                db.exportDataIntoCSV(tableName);

                Toast.makeText(getActivity().getBaseContext(),
                        "File is saved in tour SDCard storage",
                        Toast.LENGTH_SHORT).show();    
            }
        });

        buttonBudg.setOnClickListener(new View.OnClickListener() {    
            @Override
            public void onClick(View v) {
                //Do whatever you want    
            }
        });

        buttonExpense.setOnClickListener(new View.OnClickListener() {    
            @Override
            public void onClick(View v) {
                //Do whatever you want              }
        });

        return mLinearLayout;
    }
}
于 2015-06-06T17:54:00.163 に答える
0

ここにあるサポート ライブラリをインクルードしてから、 Activityextendを作成する必要がありますFragmentActivity

Android 3.x 以降のみがFragmentManagerFragmentサポートを基本Activityクラスに追加しました。

于 2012-12-02T01:46:06.900 に答える