Вопрос

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

Я создаю приложение с одним действием, 2 фрагментами и 1 интерфейсом.

android:minSdkVersion="11"
android:targetSdkVersion="19

Итак, в основном действии я пытаюсь создать ссылку на фрагмент B с помощью менеджера.Я застрял здесь, потому что Eclispse говорит мне изменить некоторые вещи (см. Ниже).:

Мое намерение:`

@Override
    public void respond(int i) {
        // TODO Auto-generated method stub

    FragmentManager manager =getFragmentManager();
    FragmentB f2= (FragmentB) manager.findFragmentById(R.id.fragment2);

}`

Если я сделаю это таким образом, я получу сообщения об ошибках и мне нужно будет внести некоторые изменения.После внесения изменений код выглядит следующим образом (и я все еще не могу связаться с FragmentB):

    @Override
public void respond(int i) {
    // TODO Auto-generated method stub

    android.app.FragmentManager manager =getFragmentManager();
    android.app.Fragment f2=  manager.findFragmentById(R.id.fragment2);

}

Для получения дополнительной информации я также приведу здесь заголовок импорта действия:

  package com.example.modular_ui;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

public class MainActivity extends Activity implements Communicator{....

Чего я здесь не понимаю?вся эта история с support.v4 / support.v7 немного сбивает с толку новичков.

Редактировать:После перехода на:

    import android.app.Fragment;
import android.app.FragmentManager;

И расширяя FragmentActivity, я все еще не могу создать ссылку на FragmentB:

@Override
public void respond(int i) {
    // TODO Auto-generated method stub

FragmentManager man = getFragmentManager();
FragmentB b = man.findFragmentById(R.id.fragment2);

}

Как и было запрошено, я опубликовал код FragmentB:

package com.example.modular_ui;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FragmentB extends Fragment {

TextView text;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    return inflater.inflate(R.layout.fragment_b, container);
}

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        text = (TextView) getActivity().findViewById(R.id.textView1);
    }

Основной XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.modular_ui.MainActivity"
    tools:ignore="MergeRootFrame" >

    <fragment
        android:id="@+id/fragment1"
        android:name="com.example.modular_ui.FragmentA"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <fragment
        android:id="@+id/fragment2"
        android:name="com.example.modular_ui.FragmentB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/fragment1"
        android:layout_marginTop="54dp" />

</RelativeLayout>
Это было полезно?

Решение

Прежде всего: Ваша деятельность должна продлевать фрагментацию.

о поддержке библиотек.Они были представлены, чтобы добавить некоторые функции на старые андроиды.Например, фрагменты были введены в Android 3.0 (SDK NR: 11).На самом деле (согласно документации) в Androids 3.0 <поддержка Listary использует систему внедрения фрагментов.

Другие советы

просто используйте getsupportforgmentmanager ();После того, как вы успешно добавили библиотеку поддержки.

OP был так близок к созданию решения, которое бы отлично работало для API 11 и новее не нуждаясь в поддержке.v4.

Ему просто нужно было изменить свое мнение . Фрагмент также не использовать support.v4 в своем импорт заявление.

Краткое изложение этих двух подходов. ВСЕ ваши Действия и фрагменты должен быть код, который выглядит точно так один из этих;не смешивайте их!(Не все строки необходимы во всех файлах;используйте строки по мере необходимости.)

поддержка-подход v4

import android.support.v4.app.FragmentActivity;
import android.support.v4.app.Fragment;      <-- ".support.v4"
import android.support.v4.app.FragmentManager;

... MainActivity extends FragmentActivity ...

... = getSupportFragmentManager();

.... YourFragment extends Fragment ... <-- same in both approaches

Подход API 11+

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;

... MainActivity extends Activity ...

... = getFragmentManager();

.... YourFragment extends Fragment ... <-- same in both approaches

Поэтому, если у вас есть проект, написанный с использованием одного из описанных выше подходов, и вы интегрируете код из других источников, обязательно найдите эти строки и измените их, чтобы они соответствовали тому, что у вас есть.

Это просто.

Если вы также хотите, чтобы ваше приложение запустилось у старых устройств (ниже уровня API), используйте getSupportFragmentManager().

Если вы хотите ваше приложение запустить на устройствах с уровнем API выше 11, то используйте getFragmentManger().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top