Ошибка переключения с экрана-заставки на меню вкладок на Android

#android #splash-screen

#Android #экран-заставка

Вопрос:

Я застрял…

Ошибка:

 04-11 14:30:11.606: ERROR/AndroidRuntime(1012): Uncaught handler: thread Thread-8 exiting due to uncaught exception 04-11 14:30:11.616: ERROR/AndroidRuntime(1012): android.content.ActivityNotFoundException: Unable to find explicit activity class {mapa.montenegro/mapa.montenegro.TabMain}; have you declared this activity in your AndroidManifest.xml?
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at android.app.Activity.startActivityForResult(Activity.java:2749)
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at android.app.Activity.startActivity(Activity.java:2855)
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at mapa.montenegro.Main$1.run(Main.java:49)
04-11 14:30:11.606: ERROR/AndroidRuntime(1012): Uncaught handler: thread Thread-8 exiting due to uncaught exception
04-11 14:30:11.616: ERROR/AndroidRuntime(1012): android.content.ActivityNotFoundException: Unable to find explicit activity class {mapa.montenegro/mapa.montenegro.TabMain}; have you declared this activity in your AndroidManifest.xml?
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at android.app.Activity.startActivityForResult(Activity.java:2749)
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at android.app.Activity.startActivity(Activity.java:2855)
04-11 14:30:11.616: ERROR/AndroidRuntime(1012):     at mapa.montenegro.Main$1.run(Main.java:49)
  

Основной класс:

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;

public class Main extends Activity {
    //some properties..     
    boolean _active = true;
    // time to display the splash screen in ms
    int _splashTime = 3000; 

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // thread for displaying the SplashScreen
        Thread splashTread = new Thread() {
            @Override
            public void run() {
                try {
                    int waited = 0;
                    while(_active amp;amp; (waited < _splashTime)) {
                        sleep(100);
                        if(_active) {
                            waited  = 100;
                        }
                    }
                } catch(InterruptedException e) {
                    // print error
                    Log.v("InterruptedException", e.toString());
                } finally {
                    //finish                    
                    finish();

                    //print
                    Log.v("splashTread", "Finished");

                    //start new activity
                    // Here we start the next activity, and then call finish()
                    // so that our own will stop running and be removed from the
                    // history stack.
                    Intent intent = new Intent();
                    intent.setClass(Main.this, TabMain.class); // here starts error
                    startActivity(intent);
                    finish();                   
                }
            }
        };
        splashTread.start();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            _active = false;
        }
        //trurn default value
        return true;
    }
}
  

// основные классы вкладки

 import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class TabMain extends TabActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        //tabhost
        TabHost tabHostMain=(TabHost) findViewById(R.layout.tab_main);

        /**
         * TabSpec used to create a new tab. By using TabSpec only we can able
         * to setContent to the tab. By using TabSpec setIndicator() we can set
         * name to tab.
         */

        /** tid1 is firstTabSpec Id. Its used to access outside. */
        TabSpec mapTabSpec = tabHostMain.newTabSpec("tid1");
        TabSpec settingsTabSpec = tabHostMain.newTabSpec("tid1");
        TabSpec homeTabSpec = tabHostMain.newTabSpec("tid1");

        /** TabSpec setIndicator() is used to set name for the tab. */
        /** TabSpec setContent() is used to set content for a particular tab. */
        mapTabSpec.setIndicator("Map Tab Name",getResources().getDrawable(R.drawable.ico_map)).setContent(
                new Intent(this, TabMap.class));
        settingsTabSpec.setIndicator("Settigs Tab Name", getResources().getDrawable(R.drawable.ico_settings)).setContent(
                new Intent(this, TabSettings.class));
        homeTabSpec.setIndicator("Home Tab Name", getResources().getDrawable(R.drawable.ico_home)).setContent(
                new Intent(this, TabHome.class));

        /** Add tabSpec to the TabHost to display. */
        tabHostMain.addTab(mapTabSpec);
        tabHostMain.addTab(settingsTabSpec);
        tabHostMain.addTab(homeTabSpec);
    }
}
  

Комментарии:

1. пожалуйста, не используйте blockquote для сообщений об ошибках, используйте вместо этого код. Спасибо

Ответ №1:

Попробуйте объявить TabMain активность в своем манифесте, как это делается с помощью Main .

Вы облажались с макетом TabHost. Вы tab_main.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">
    <TabWidget android:id="@android:id/tabs"
              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">
                    <FrameLayout
                        android:id="@android:id/tabcontent"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:padding="5dp" />
                </LinearLayout>
</TabHost>
  

Пожалуйста, ознакомьтесь с этой статьей.

И старайтесь всегда показывать фактическую трассировку стека вместо старой.

Комментарии:

1. <действие android: name=»TabMain»> <фильтр намерений> <действие android:name=»android.intent.action. ГЛАВНАЯ»></action> <категория android:name=»android.intent.category. LAUNCHER»> </category> </intent-filter> </activity> я сделал это, но я все еще получаю ошибку: (((((

2. вы должны использовать android:name=»mapa.montenegro. TabMain» или «.TabMain», если ваш пакет приложения «mapa.montenegro»

3. измените <activity android:name=»TabMain»> на <activity android:name=». TabMain»>. Обратите внимание на точку (.).

4. не работает :((((((((((( не могли бы вы написать мне на почту, я отправлю вам архивированный проект, и если у вас будет время это исправить… Спасибо

5. В вашем проекте у вас нет класса TabWidget, поэтому я не могу его запустить.

Ответ №2:

Объявляйте все действия в manifest.xml файл… Нравится

 <activity android:name=".ActivityName"
                  android:label="@string/app_name">
        </activity>
  

Комментарии:

1. <действие android: name=»TabMain»> <фильтр намерений> <действие android:name=»android.intent.action. ГЛАВНАЯ»></action> <категория android:name=»android.intent.category. LAUNCHER»> </category> </intent-filter> </activity> я сделал это, но я все еще получаю ошибку: (((((

2. нет, нет, попробуйте что-то вроде этого: pastie.org/1786367 объявление фильтра намерений для каждого действия превращает их в действия запуска… попробуйте прочитать intent-filter с веб-сайта android.разработчика…