2013-03-01 4 views
0

Я хочу разработать Android приложение для планшета в ландшафтном режиме с 2 фрагментами:Показано фрагменты бок о бок

  1. Фрагмент 1 содержит список кнопок.
  2. Фрагмент 2 - это пространство для одного фрагмента, связанного с кнопкой.

С «фрагменты кнопки, связанные с» я имею в виду следующее: Когда пользователь нажимает на кнопку в фрагменте 1, фрагмент, связанный с этой кнопкой, должны быть отображены в фрагменте 2.

Фрагмент 1 вид панель навигации.

Для реализации этого я написал следующий код:

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name="mypackage.MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="landscape" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".impl.activities.IntroActivity"></activity> 
    <activity android:name=".impl.activities.SimulationActivity"></activity> 

</application> 

MainActivity выглядит следующим образом:

public class MainActivity extends Activity implements IMainActivity { 
    @Override 
    public void onCreate(final Bundle aSavedInstanceState) { 
    super.onCreate(aSavedInstanceState); 
    setContentView(R.layout.main); 
    } 

    @Override 
    public void show(final View aView, final Class<? extends Activity> aActivityClass) { 
    startActivity(new Intent(this, aActivityClass)); 
    } 


} 

main.xml имеет следующее содержание:

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:name="mypackage.fragments.ContentFragment"/> 

ContentFragment выглядит следующим образом :

public class ContentFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    final View view = inflater.inflate(R.layout.mainfrag, container, false); 

    IMainActivity mainActivity = (IMainActivity) this.getActivity(); 
    final IntroButtonClickListener introListener = new IntroButtonClickListener(
     mainActivity, IntroActivity.class); 

    final IntroButtonClickListener simulationListener = new IntroButtonClickListener(
     mainActivity, SimulationActivity.class); 


    view.findViewById(R.id.intro_button).setOnClickListener(introListener); 
    view.findViewById(R.id.simulation_button).setOnClickListener(simulationListener); 

    return view; 
    } 

IntroButtonClickListener:

class IntroButtonClickListener implements View.OnClickListener { 
    private IMainActivity mainActivity; 
    private Class<? extends Activity> activityClass; 

    public IntroButtonClickListener(final IMainActivity aMainActivity, 
     final Class<? extends Activity> aActivityClass) { 
    this.mainActivity = aMainActivity; 
    this.activityClass = aActivityClass; 
    } 

    @Override 
    public void onClick(final View aView) { 
    this.mainActivity.show(aView, this.activityClass); 
    } 

} 

mainfrag.xml:

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

    <Button 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="25" 
    android:id="@+id/intro_button" 
    android:text="@string/intro_button"/> 

    <Button 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="25" 
    android:id="@+id/simulation_button" 
    android:text="@string/simulation_button"/> 

    <Button 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="25" 
    android:id="@+id/statistics_button" 
    android:text="@string/statistics_button"/> 

    <Button 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="25" 
    android:id="@+id/help_button" 
    android:text="@string/help_button"/> 


</LinearLayout> 

Этот код приводит к следующим результатам:

  1. При запуске приложения, есть 4 кнопки на экране (от mainfrag.xml).
  2. Когда я нажимаю intro_button или simulation_button, вид изменяется на IntroFragment или SimulationFragment, соответственно.
  3. Когда я нажимаю кнопку «Назад», четыре кнопки снова видны.

Моя проблема: когда IntroFragment или SimulationFragment становятся видимыми, панель кнопок исчезает.

Как я должен изменить свой код таким образом, чтобы как кнопки панели и соответствующая «деталь» вид (IntroFragment, SimulationFragment) открыты в то же время (имеется достаточно пространства экрана для этого)?

ответ

0

Этот пример показан в APIDemos, которые находятся в Android SDK. где у них есть левая панель в виде списка, а выбранный элемент показывает соответствующий фрагмент в правой части.

Вы можете обнаружить, что в

SDK \ андроида-sdk_r11-окна \ андроида-СДК-окна \ Samples \ андроид-14 \ ApiDemos