Android-представления в методе вкладок - PullRequest
1 голос
/ 23 ноября 2011

Я создаю приложение, в котором каждая вкладка имеет разные экраны для переключения между ними.Первоначально я хотел, чтобы каждая вкладка показывала разные действия, но из того, что я прочитал, кажется, что это плохой способ сделать это.

Так что я использовал XML-файл, который имеет макет для каждогоСкрин все в одном файле.И я использую Java для программирования, которое отображает каждый требуемый экран и скрывает те, которые мне не нужны.Проблема, с которой я столкнулся при таком подходе, заключается в том, что все мои Java-файлы - это один файл, а все мои XML-файлы - в одном файле.Может ли кто-нибудь объяснить мне лучший способ сделать это, так как я уверен, что должен быть лучший способ.В моей деятельности много экранов, и мне все время приходится пролистывать весь этот код, так как чем больше экранов я добавляю, тем больше становится код.

В идеале я хотел бы иметь код для каждого экранав своем собственном классе Java, и макеты для каждого экрана в своих собственных файлах XML и просто переключаться между ними.

Чтобы дать вам пример моего кода

<TabHost android:id="@+id/tabhost" android:layout_width="fill_parent"
android:windowSoftInputMode="adjustResize"
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#92c223" android:layout_height="fill_parent">

<LinearLayout android:id="@+id/tab1"
android:layout_above="@android:id/tabs"    android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <ScrollView android:layout_width="fill_parent"
            android:layout_height="wrap_content">
            <RelativeLayout android:layout_width="match_parent"
                android:layout_height="wrap_content">
XML CODE FOR LAYOUT GOES IN HERE. EACH NEW SCREEN IS CONTAINED WITHIN THESE LAYOUTS.
            </RelativeLayout>
        </ScrollView>
    </LinearLayout>

<TabWidget android:layout_width="fill_parent" android:id="@android:id/tabs" android:layout_weight="0"
 android:layout_gravity="bottom"      android:layout_height="wrap_content"></TabWidget>
</FrameLayout>
 </TabHost>

Затем в своем коде Java я переключаюсь между вкладками, используя

if ("home".equals(tabId)) {
                tab1.setVisibility(View.VISIBLE);
                tab2.setVisibility(View.GONE);
                tab3.setVisibility(View.GONE);
                tab4.setVisibility(View.GONE);
                tab5.setVisibility(View.GONE);

и при переключении между экранами в деятельностиКогда пользователь нажимает кнопку в этом упражнении, я использую прослушиватель щелчков и делаю это

        tab2.setVisibility(View.GONE);
        cvv.setVisibility(View.VISIBLE);

Я уверен, что есть лучший способ сделать это, и был бы благодарен, если бы кто-то дал мне предложения.

Другая проблема заключается в том, что все в одном действии, когда я нажимаю кнопку «Назад», просто выходит из приложения.Предпочел бы иметь его, чтобы, когда они наносили ответный удар, он возвращался к предыдущему экрану.

1 Ответ

2 голосов
/ 23 ноября 2011

«Лучший способ» - дать каждой вкладке отдельную активность.Почему вы отклонили этот подход в своем первом абзаце?Это именно то, для чего был разработан TabHost.

То, что я обычно делаю, это подкласс TabActivity.В методе onCreate(Bundle savedInstanceState) я делаю следующее один раз для каждой вкладки:

tabHost.addTab(
    tabHost.newTabSpec("tab1")
    .setIndicator("Tab 1", res.getDrawable(R.drawable.tab1))
    .setContent(new Intent().setClass(this, Tab1Activity.class))
);

Затем вы создаете каждый Tab#Activity в отдельном файле.Это красиво и модульно.Переключение между вкладками осуществляется библиотекой.Вам не нужно беспокоиться обо всем этом.

На вкладках вы можете захватить кнопку возврата, переопределив метод onKeyDown в своей внутренней деятельности:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // Do your thing
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
...