При попытке запустить приложение показывает, что приложение остановлено.
activity_main.xml
это страница activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<fragment
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent"
class="com.example.android.mydemofragment2.FoodListFragment"
/>
<FrameLayout
android:layout_width="0dp"
android:layout_weight="3"
android:layout_height="match_parent"
class="com.example.android.mydemofragment2.MenuDetailFragment"
android:id="@+id/fragment_container"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
MainActivity.java
это страница MainActivity
package com.example.android.mydemofragment2;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity implements
FoodListFragment.FoodListListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void itemclicked(long id) {
MenuDetailFragment details = new MenuDetailFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
details.setMenuID(id);
ft.replace(R.id.fragment_container, details);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
}
FoodListFragment.java
это страница FoodListFragment
package com.example.android.mydemofragment2;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class FoodListFragment extends ListFragment {
static interface FoodListListener{
void itemclicked(long id);
}
private FoodListListener listener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.listener = (FoodListListener) activity;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
if(listener!=null){
listener.itemclicked(id);
}
super.onListItemClick(l, v, position, id);
}
public FoodListFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String names [] = new String[Menu.menus.length];
for(int i = 0; i<names.length;i++){
names[i]=Menu.menus[i].getName();
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(inflater.getContext(),android.R.layout.simple_list_item_1,names);
setListAdapter(adapter);
return super.onCreateView(inflater,container,savedInstanceState);
}
}
Menu.java
это меню Java класса
package com.example.android.mydemofragment2;
public class Menu {
private String name;
private String description;
public static final Menu[] menus = {
new Menu("Breakfast","2 Whole eggs \n Bread \n Coffee"),
new Menu("Lunch","3 Whole eggs \n Brocolli"),
new Menu("Dinner","Brown rice \n Potato \n Brocolli")
};
private Menu(String name, String description){
this.name = name;
this.description = description;
}
public String getDescription() {
return description;
}
public String getName() {
return name;
}
@Override
public String toString() {
return this.name;
}
}
fragment_menu_detail.xml
это страница фрагмента_меню_детали
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MenuDetailFragment">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/name"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/desc"/>
</LinearLayout>
MenuDetailFragment.java
это страница MenuDetailFragment
package com.example.android.mydemofragment2;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MenuDetailFragment extends Fragment {
private long menuID;
public void setMenuID(long menuID){
this.menuID = menuID;
}
public MenuDetailFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
if(savedInstanceState != null){
menuID = savedInstanceState.getLong("menuID");
}
return inflater.inflate(R.layout.fragment_menu_detail, container,
false);
}
@Override
public void onStart() {
super.onStart();
View view = getView();
if(view!= null){
TextView title = (TextView) view.findViewById(R.id.name);
TextView description = (TextView) view.findViewById(R.id.desc);
Menu menu = Menu.menus[(int) menuID];
title.setText(menu.getName());
description.setText(menu.getDescription());
}
}
}
, пожалуйста, помогите мне найти ошибку в этом коде приложения, который я много пытался найти, но не смог найти ошибку, которую я сделал.
Все сообщения журнала
09-03 20: 36: 35,798 7514-7514 /? I / zygote: не поздно - включение -Xcheck: jni (уже включено)
09-03 20: 36: 35,887 7514-7514 /? W / zygote: неожиданный вариант процессора для X86 с использованием значений по умолчанию: x86
09-03 20: 36: 36.651 7514-7514 / com.example.android.mydemofragment2 I / InstantRun: запуск сервера мгновенного запуска: это основной процесс
09-03 20: 36: 36.925 7514-7514 / com.example.android.mydemofragment2 D / AndroidRuntime: выключение виртуальной машины
09-03 20: 36: 36.931 7514-7514 / com.example.android.mydemofragment2 E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное
Процесс: com.example.android.mydemofragment2, PID: 7514
java.lang.RuntimeException: Невозможно начать действие : Ошибка надувания фрагмента класса
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2778)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2856)
atroid.app.ActivityThread.-wrap11 (неизвестный источник: 0)
в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1589)
на android.os.Handler.dispatchMessage (Handler.java:106)
на android.os.Looper.loop (Looper.java:164)
на android.app.ActivityThread.main (ActivityThread.java:6494)
в java.lang.reflect.Method.invoke (родной метод)
в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)
Вызывается: android.view.InflateException: строка 12 двоичного файла XML: строка 12 двоичного файла XML: ошибка, вызывающая раздувание фрагмента класса
Вызвано: android.view.InflateException: строка двоичного XML-файла # 12: ошибка надувания фрагмента класса
Вызывается: java.lang.IllegalArgumentException: строка двоичного файла XML # 12: должна указывать уникальный тег android: id, android: или иметь родителя с идентификатором com.example.android.mydemofragment2.FoodListFragment.
на android.support.v4.app.FragmentManagerImpl.onCreateView (FragmentManager.java:3687)
на android.support.v4.app.FragmentController.onCreateView (FragmentController.java:114)
на android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView (FragmentActivity.java:374)
на android.support.v4.app.BaseFragmentActivityApi14.onCreateView (BaseFragmentActivityApi14.java:39)
на android.support.v4.app.FragmentActivity.onCreateView (FragmentActivity.java:68)
на android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:780)
на android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:730)
на android.view.LayoutInflater.rInflate (LayoutInflater.java:863)
на android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:824)
на android.view.LayoutInflater.rInflate (LayoutInflater.java:866)
на android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:824)
на android.view.LayoutInflater.inflate (LayoutInflater.java:515)
на android.view.LayoutInflater.inflate (LayoutInflater.java:423)
на android.view.LayoutInflater.inflate (LayoutInflater.java:374)на android.support.v7.app.AppCompatDelegateImplV9.setContentView (AppCompatDelegateImplV9.java:287)
на android.support.v7.app.AppCompatActivity.setContentView (AppCompatActivity.java:139)
в com.example.android.mydemofragment2.MainActivity.onCreate (MainActivity.java:12)
на android.app.Activity.performCreate (Activity.java:7009)
на android.app.Activity.performCreate (Activity.java:7000)
на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1214)
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2731)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2856)
atroid.app.ActivityThread.-wrap11 (неизвестный источник: 0)
в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1589)
на android.os.Handler.dispatchMessage (Handler.java:106)
на android.os.Looper.loop (Looper.java:164)
на android.app.ActivityThread.main (ActivityThread.java:6494)
в java.lang.reflect.Method.invoke (родной метод)
в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)