Исключение Android-фрагмента: активность не найдена

Я использую navigation-drawer Шаблон в затмении, чтобы сделать простое приложение для Android. У меня есть проблемы с фрагментом. Я объявил фрагмент под названием PresenceLog Fragment в манифесте, но когда я вызвал его в MainActivityбревно еще говорит что

03-23 13:54:50.817: E/AndroidRuntime(16750): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.singtel.ricecooker/com.singtel.ricecooker.PresenceLogFragment}; have you declared this activity in your AndroidManifest.xml?

Вот мой манифест

Вот мой фрагмент класса

public class PresenceLogFragment extends Fragment{
private TextView myText = null;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    return inflater.inflate(R.layout.presence_log, null);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    ArrayList<String> userList = null;
    RiceServerRequest newRequest = new RiceServerRequest();
    //newRequest.getRequestInfo(this);

}

public void updateUserList(ArrayList<String> userList){
    LinearLayout lView = (LinearLayout) getView().findViewById (R.layout.presence_log);
    //LinearLayout ll = (LinearLayout)fragment.getView().findViewById(R.id.commentFragmentLayout);

    for (int i = 0; i < userList.size();i++){
        myText = new TextView(getActivity());
        myText.setText(userList.get(i));
        lView.addView(myText);
    }
    //setContentView(lView);
}

Вот мой MainActivity

private void launchPresenceLog(){
    Intent intent = new Intent(this,PresenceLogFragment.class);
    startActivity(intent);
}

Было бы здорово, если бы вы знали, что не так с моим кодом. Кроме того, поскольку я новичок в программировании для Android, я был бы признателен, если бы вы могли предложить несколько онлайн-курсов.

8 ответов

Решение

Вы создали Фрагмент, поэтому вы не можете называть его Деятельностью. Вам необходимо заменить представление контейнера, правильно FrameLayout на ваш фрагмент.

getSupportFragmentManager()
  .beginTransaction()
  .replace(R.id.content_frame, new PresenceLogFragment())
  .commit();

Вы не можете загрузить фрагмент через Intent. Вы должны сделать это используя менеджер фрагментов следующим образом:

Fragment fragment = new PresenceLogFragment(MainActivity.this);
FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction ft = fragmentManager.beginTransaction();                
            ft.replace(R.id.yourFragmentContainer, fragment).commit();
 have you declared this activity in your AndroidManifest.xml?  

Посмотрите в своем манифесте и посмотрите, есть ли у вас <activity> элемент, который зарегистрировал вашу деятельность. Если нет, добавьте один.

Посмотрите здесь: http://developer.android.com/guide/topics/manifest/activity-element.html

 <activity
        android:name="com.singtel.ricecooker.PresenceLogFragment"
        android:label="@string/app_name" >
    </activity>

добавьте это в свой файл манифеста, если com.singtel.ricecooker.PresenceLogFragment представляет действие и если это фрагмент, то вы делаете это неправильно. во втором случае используйте приведенный ниже код,

getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, new PresenceLogFragment())
.commit();

Вы пытаетесь использовать фрагмент в качестве деятельности. Вы можете либо переименовать PresenceLogFragment в PresenceLogActivity, чтобы он расширял Activity вместо Fragment, либо вы можете попробовать использовать свой фрагмент в качестве фрагмента.

Кроме того, любая активность, которую вы пытаетесь использовать в своем приложении, должна быть объявлена ​​в манифесте ( ссылка)

Подробнее о фрагментах и ​​как их использовать здесь

Ясно.

msgstr "вы объявили об этой активности в вашем AndroidManifest.xml?"

Вы должны проверить, есть ли тег。

увидеть это или возможно это

Пожалуйста, откройте файл манифеста и объявите так:

<activity
        android:name=".MainActivity" //your activity name
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

если это ваша деятельность, то сделайте это иначе, сделайте это

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

введите имя вашего Java-файла, который расширяет Activity, а не Fargment. Означает фрагмент, который создается из этого Java-файла Activity.

      Navigation.findNavController(view).navigate(R.id.youAc)
Другие вопросы по тегам