Ошибка «не найдено представление для идентификатора фрагмента» перед вызовом onCreateView()Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка «не найдено представление для идентификатора фрагмента» перед вызовом onCreateView()

Сообщение Anonymous »

Это связано с несколькими сообщениями, но я не вижу ничего, что объясняло бы порядок создания представлений в иерархии представлений (статическое — xml и динамическое — в коде).

У меня есть FragmentActivity, в котором размещено действие и фрагмент. Я получаю ошибку времени выполнения из-за того, что представление не создается для фрагмента до вызова onCreateView фрагмента. Трудно определить, какой вызывающий метод не может найти представление, поскольку отладчик не может найти правильные номера строк во время пошагового выполнения.

Я не могу правильно прикрепить источник, чтобы увидеть внутреннюю часть FragmentManager, поскольку, похоже, существует несоответствие между источником dl'd и .jar
Я поместил запись Log.i в StreamingActivity.onCreateView, и перед этим возникла ошибка.

Вот соответствующий LogCat:

Код: Выделить всё

07-19 10:13:36.091: I/StreamingActivity(9886): onCreate
07-19 10:13:42.271: W/dalvikvm(9886): threadid=1: thread exiting with uncaught exception (group=0x40020560)
07-19 10:13:42.281: E/AndroidRuntime(9886): FATAL EXCEPTION: main
07-19 10:13:42.281: E/AndroidRuntime(9886): java.lang.RuntimeException: Unable to start activity
ComponentInfo{kesten.fragmentstestbed/kesten.fragmentstestbed.FragmentsMainActivity}:
java.lang.IllegalArgumentException: No view found for id 0x7f05002e for fragment
StreamingActivity{4052f810 #0 id=0x7f05002e}
caused by
java.lang.IllegalArgumentException: No view found for id 0x7f05002e for fragment
StreamingActivity{40530948 #0 id=0x7f05002e}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:865)
мои фрагменты Java-файлов:

Код: Выделить всё

public class FragmentsMainActivity extends FragmentActivity {

public final static int STARTUP_ACTIVITY_RESULT=0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragments_main);

if(savedInstanceState == null) {
Intent intentStartupActivity = new Intent(this, StartupActivity.class);
if(intentStartupActivity != null)
startActivityForResult(intentStartupActivity, STARTUP_ACTIVITY_RESULT);

// get an instance of FragmentTransaction from your Activity
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();

//add a fragment
StreamingActivity streamingActivity = new StreamingActivity();
if (streamingActivity != null) {
fragmentTransaction.add(R.id.streamingactivity, streamingActivity);
fragmentTransaction.commit();
}
}
}
мой фрагмент:

Код: Выделить всё

public class StreamingActivity extends Fragment {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("StreamingActivity","onCreate")
}
мои файлы макета:
"res/layout/main.xml"
и «activity_fragments_main.xml» для моей FragmentActivity
Возможные причины ошибки «id не найден», полученные из других потоков Stackoverflow:
  • неправильный макет в setContentView() метода onCreate() FragmentActivity.
Я проверил, все мои XML-файлы на месте. Возможно, произошла синтаксическая ошибка или отсутствует связанный ресурс, но я этого не вижу. Я понимаю, что HierarchyViewer будет полезным инструментом для отладки пользовательского интерфейса, но я не могу заставить его работать.
  • идентификатор передается в FragmentTransaction .add должен быть дочерним элементом макета, указанного в setContentView.
onCreate моей FragmentActivity
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragments_main);

onCreateView моего фрагмента< /p>

Код: Выделить всё

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

Log.i("StreamingActivity","onCreateView");
View view = inflater.inflate(R.layout.main, container, false);
Я предполагаю, что LayoutManager передает правильное значение для контейнера, т. е. значение, установленное в методе setContentView() FragmentActivity. Но мы все равно туда никогда не доберемся. Ошибка в logCat возникает до того, как мы входим в onCreateView().

Единственное, что я могу думать о банкомате, это то, что startActivity (закрытый сторонний) вызывается после setContentView. и до того, как StreamingActivity установит для представления содержимого что-то кроме R.layout.activity_fragments_main, которое не является родительским для представления моего фрагмента.

Проблема, похоже, связана с тем, что, хотя В Activity есть setContentView, который можно вызывать в любое время, а в Fragment есть только onCreateView(), который вызывается после транзакций фрагмента, запускающих фрагмент.

Почему и что пытается получить доступ к фрагменту просмотреть до вызова onCreateView()?

darKoram

Подробнее здесь: https://stackoverflow.com/questions/115 ... iew-called
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»