0

そのため、私は Android DK に非常に慣れておらず、Fragments をいじり始めるまではかなり順調でした。

その核となるのは、アプリの画面に一連のボタンを配置することです。ユーザーが押すボタンは、画面に表示されるテキスト/スピナー/ボタンを変更します。

それをどのように実装することにしたかは、フラグメントを介したものでした。Fragment が表示されない理由がわかりませんが、これは比較的単純な例です。

比較的単純な activity_main.xml がありました。変数名を変更しましたが、以下を参照してください。

<LinearLayout android:id="@+id/mainActivity" 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:animateLayoutChanges="true" >

<Button
    android:id="@+id/buttonD"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/d_name"
    android:onClick="dMenuButton" />

<RelativeLayout
    android:id="@+id/fragment_container"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="gone" />

<Button
    android:id="@+id/buttonR"
    android:layout_below="@id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/r_name"
    android:onClick="rButton" />

</LinearLayout>

そして対応する MainActivity.java

public void dMenuButton(View view){

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.show(dFragment);
    fragmentTransaction.commit();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;

}

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    // remove title
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                         WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        dFragment = new DFragment();
        fragmentTransaction.add(R.id.fragment_container, dFragment);
        fragmentTransaction.commit();
    }

}

そしてfragment_d.xml

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

<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="20dp"
    android:text="@string/text1"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<Spinner
    android:id="@+id/numD"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@id/text1"
    android:layout_toRightOf="@id/text1" />

</RelativeLayout>

それぞれの DFragment.java で

public class DFragment extends Fragment {

static Spinner dSpinner;
ArrayAdapter<CharSequence> dAdapter;
RelativeLayout view;

public static DFragment newInstance() {
    DFragment dFragment = new DFragment();

    return dFragment ;
}

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

    view = (RelativeLayout) inflater.inflate(R.layout.fragment_d,
                                 container, false);

    createSpinners();

    return view;
}

private void createSpinners() {

    dSpinner = (Spinner) view.findViewById(R.id.numD);
    dAdapter= ArrayAdapter.createFromResource(getActivity().getBaseContext(),
                                                     R.array.numD,
                                                     android.R.layout.simple_spinner_item);

}

}

現在、フラグメント レイアウトはその下のボタンを覆い隠しています。以下のコンポーネントを強制的に押し下げるための助けは素晴らしいでしょう.

前もって感謝します。

4

1 に答える 1

0

の可視性により、あなたは間違いなく正しい軌道に乗っていfragment_containerます。それを常に表示したままにし、フラグメント トランザクションがそのコンテナーに表示される内容を変更できるようにすることができます。

要件に応じて、.replace(R.layout.fragment_container, anotherFragment)表示するフラグメントを変更するだけです (コードは疑似のみ)。

ボタンに関してはactivity_main.xml、フラグメントのレイアウトに追加するのですか、それともフラグメントのレイアウトに追加しますか? fragment_containerメイン アクティビティ レイアウトのレイアウトの後に新しいボタン/テキストを追加する限り、問題はありません。ボタン/テキストで何を達成しようとしているのかを正確に教えてください!

幸運を!

于 2013-07-29T23:24:54.983 に答える