Android: раздувать один класс в другой - PullRequest
0 голосов
/ 16 июля 2011

Я создаю меню TabActivity для использования во всем приложении.Есть ли способ создать меню в одном классе, а затем раздувать его в каждом упражнении, в котором я хочу его использовать?

Упражнение, которое я хочу надуть в меню вкладок:

    private void setupView() {
    LayoutInflater inflater = (LayoutInflater)RecipeGrainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    RecipeTabs tabs = new RecipeTabs(this, 1);
    View tabView = inflater.inflate(R.layout.recipe_tabs, null);
}

Макет TabAcitity xml, который я уже раздувал в основное действие:

<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5dp">
    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp" />
</LinearLayout> </TabHost>

Класс TabActivity, который я создал для настройки всех моих вкладок:

public class RecipeTabs extends TabActivity {

private Context myContext;
private int currentTab;

public RecipeTabs(Context context, int currentTab) {
    this.myContext = context;
    this.currentTab = currentTab;
    Resources res = getResources();
    TabHost tabHost = getTabHost();
    TabHost.TabSpec spec;
    Intent intent;

    //Grain Tab
    intent = new Intent().setClass(context, RecipeGrainActivity.class);
    spec = tabHost.newTabSpec("grain").setIndicator("Grain", res.getDrawable(R.drawable.grain_icon_states))
    .setContent(intent);
    tabHost.addTab(spec);

    //Hops Tab
    intent = new Intent().setClass(context, RecipeGrainActivity.class);
    spec = tabHost.newTabSpec("hops").setIndicator("Hops", res.getDrawable(R.drawable.hops_icon_states))
    .setContent(intent);
    tabHost.addTab(spec);

    //Mash Tab
    intent = new Intent().setClass(context, RecipeGrainActivity.class);
    spec = tabHost.newTabSpec("mash").setIndicator("Mash", res.getDrawable(R.drawable.mash_icon_states))
    .setContent(intent);
    tabHost.addTab(spec);

    //Notes Tab
    intent = new Intent().setClass(context, RecipeGrainActivity.class);
    spec = tabHost.newTabSpec("notes").setIndicator("Notes", res.getDrawable(R.drawable.notes_icon_states))
    .setContent(intent);
    tabHost.addTab(spec);

    tabHost.setCurrentTab(currentTab);
}

}

При попытке выполнить упражнение в LogCat появляется следующая ошибка:

07-16 15: 41: 18.237: ОШИБКА / AndroidRuntime (352): обработчик Uncaught: выход основного потока из-за невыполненного исключения 07-16 15: 41: 18.247: ERROR / AndroidRuntime (352): java.lang.RuntimeException: Невозможно запустить действие.352): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2401) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2417) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): на android.app.ActivityThread.access $ 2100 (ActivityThread.java:116) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1794) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): на android.os.Handler.dispatchMessage (Handler.java:99) 07-16 15: 41: 18.247: ОШИБКА /AndroidRuntime (352): на android.os.Looper.loop (Looper.java:123) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): на android.app.ActivityThread.main (ActivityThread.java:4203) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): на java.lang.reflect.Method.invokeNative (собственный метод) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): на java.lang.reflect.Method.invoke (Method.java:521) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:791) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:549) 07-16 15: 41: 18.247: ОШИБКА / AndroidRunt(352): at dalvik.system.NativeStart.main (собственный метод) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352):

Причина: java.lang.NullPointerException 07-1615: 41: 18.247: ОШИБКА / AndroidRuntime (352): в android.content.ContextWrapper.getResources (ContextWrapper.java:80) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): в com.bluelightuniverse.android.brewmobile.RecipeTabs. (RecipeTabs.java:17) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): в com.bluelightuniverse.android.brewmobile.RecipeGrainActivity.setupView (RecipeGrainActivity.java:20) 07-1615: 41: 18.247: ОШИБКА / AndroidRuntime (352): в com.bluelightuniverse.android.brewmobile.RecipeGrainActivity.onCreate (RecipeGrainActivity.java:15) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): на андроиде.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1123) 07-16 15: 41: 18.247: ОШИБКА / AndroidRuntime (352): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2364)

Это говорит мне, что у меня есть ИССсо следующей строкой в ​​классе TabActivity:

Resources res = getResources();

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

1 Ответ

0 голосов
/ 17 июля 2011

Я думал об этом (как обычно).Я закончил тем, что установил TabActivity как основное действие, а не пытался установить его как подкласс.TabHost загружает ваши «связанные» действия автоматически, и его очень легко реализовать.Другие ресурсы для поиска - это фрагменты, поскольку они следуют тому же принципу и, судя по всему, могут быть очень полезны для приложений.

...