#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.разработчика…