#android #eclipse #adt
#Android #eclipse #adt
Вопрос:
Я пытаюсь работать с динамически добавляемыми фрагментами. Мои 2 фрагмента называются: library_view и controls_view и main_layout.xml это основной макет.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fragmentstest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity android:name="MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Мой основной класс MainActivity.java . У меня установлена опция Android Private Libraries.
import com.example.fragmentstest.R;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
public class MainActivity extends Activity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
//add fragments programatically
//ref to frag manager
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.present_activity_fragment, new LibraryActivity());
fragmentTransaction.add(R.id.select_fragment, new SelectActivity());
fragmentTransaction.commit();
}
}
Я использовал android: name в <activity>
, как это появилось в автоматических подсказках, но я предполагаю, что я делаю что-то неправильно.
Также безуспешно пытался:
- .MainActivity
- com.example.fragmentstest.MainActivity
Итак, мой вопрос в том, как мне определить точное значение поля android: name?
Класс MainActivity в моем коде расширяет Activity, а два фрагмента расширяют класс Fragments.
Это журнал ошибок:
07-04 19:00:05.933: E/AndroidRuntime(18127): java.lang.RuntimeException: Unable to instantiate application com.example.fragmentstest.MainActivity: java.lang.ClassNotFoundException: Didn't find class "com.example.fragmentstest.MainActivity" on path: DexPathList[dexElements=[zip file "/data/app/com.example.fragmentstest-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.fragmentstest-2, /vendor/lib, /system/lib]]
Комментарии:
1. объявлена ли MainActivity внутри com / example / fragmentstest?
2. Используйте
.MainActivity
или ваш второй вариант.3. @deathember Я уже пробовал эти два варианта, ни один из них не сработал.
4. Я не думаю, что это слово означает то, что вы думаете, что это значит… В этом коде нет ничего, что имело бы какое-либо отношение к фрагментам.
5. @G. Блейк Майке, хотя я новичок в разработке Android, я знаю, что это значит. Класс MainActivity программно включает фрагменты (2 из них для создания основного действия), выполнив 4 шага обращения к менеджеру фрагментов, запуска транзакции, добавления фрагментов и их фиксации. Если я неправильно понял концепцию, пожалуйста, поправьте меня.
Ответ №1:
вы должны указать имя своего пакета в первой строке кода вашей активности следующим образом
package com.SHINE.ui;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Mapactivity extends Activity implements OnClickListener,
TranslationListner, OnTouchListener {
здесь мой код в XML-манифесте
<activity
android:name="com.SHINE.ui.Mapactivity"
Комментарии:
1. О, понял, я забыл упомянуть пакет в моих классах java. Если вы могли бы изменить свой ответ, чтобы сказать это, я буду рад выбрать его. Спасибо, что указали на это косвенно!
2. Эй, просто для большей точности, name = MainActivity также работает, поэтому, возможно, вы могли бы просто включить в свой ответ tell о части, касающейся пакета. Еще раз спасибо..
3. «это включено» вы должны указать имя вашего пакета в первой строке
4. Я хочу сказать, что нет необходимости изменять
<activity android:name="MainActivity"
, это работает без каких-либо изменений.
Ответ №2:
Изменить
<activity android:name="MainActivity"
Для
<activity android:name=".MainActivity"
Комментарии:
1. Как я уже сказал, я уже пробовал .MainActivity, но это не работает.
2. Не могли бы вы сказать нам, в каком пакете находится ваша активность?
3. У меня есть файлы моего класса в пакете (по умолчанию)… переместил их в пакет com.example.fragmentstest и смог заставить его работать!