2015-08-14 2 views
1

Я создал новое действие, щелкнув правой кнопкой мыши по моему проекту и выбрав новый фрагмент> фрагмент> пустой фрагмент.Невозможно присоединить фрагмент к действию через XML

Создано этот файл. Единственное, что я добавил, это линии под методом onCreateView(). Я также внедрил onFragmentInteractionListener в действие, которое я хочу добавить в этот фрагмент. Я попытался реализовать метод onFragmentInteraction(...) для этого действия, но оставил его незаполненным.

В чем проблема?

import android.app.Activity; 
import android.net.Uri; 
import android.os.Bundle; 
import android.text.Html; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.support.v4.app.Fragment; 


public class FragmentHowToPlay extends Fragment { 
    // TODO: Rename parameter arguments, choose names that match 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 

// TODO: Rename and change types of parameters 
private String mParam1; 
private String mParam2; 

private OnFragmentInteractionListener mListener; 

/** 
* Use this factory method to create a new instance of 
* this fragment using the provided parameters. 
* 
* @param param1 Parameter 1. 
* @param param2 Parameter 2. 
* @return A new instance of fragment FragmentHowToPlay. 
*/ 
// TODO: Rename and change types and number of parameters 
public static FragmentHowToPlay newInstance(String param1, String param2) { 
    FragmentHowToPlay fragment = new FragmentHowToPlay(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

public FragmentHowToPlay() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_fragment_how_to_play, container, false); 

    TextView text1 = (TextView) v.findViewById(R.id.text1); 

    text1.setText(Html.fromHtml(getString(R.string.my_text))); 


    return v; 


} 

// TODO: Rename method, update argument and hook method into UI event 
public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     mListener = (OnFragmentInteractionListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 

/** 
* This interface must be implemented by activities that contain this 
* fragment to allow an interaction in this fragment to be communicated 
* to the activity and potentially other fragments contained in that 
* activity. 
* <p/> 
* See the Android Training lesson <a href= 
* "http://developer.android.com/training/basics/fragments/communicating.html" 
* >Communicating with Other Fragments</a> for more information. 
*/ 
public interface OnFragmentInteractionListener { 
    // TODO: Update argument type and name 
    public void onFragmentInteraction(Uri uri); 
} 

} 

Здесь ошибка LogCat:

Process: mjj.fling, PID: 8965 
java.lang.RuntimeException: Unable to start activity ComponentInfo{mjj.fling/mjj.fling.HowToPlayActivity}: android.view.InflateException: Binary XML file line #19: Error inflating class fragment 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2441) 
     at android.app.ActivityThread.access$800(ActivityThread.java:162) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5431) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 
Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class fragment 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:402) 
     at android.app.Activity.setContentView(Activity.java:2214) 
     at mjj.fling.HowToPlayActivity.onCreate(HowToPlayActivity.java:16) 
     at android.app.Activity.performCreate(Activity.java:6093) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 



Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class mjj.fling.FragmentHowToPlay that is not a Fragment 
     at android.app.Fragment.instantiate(Fragment.java:606) 
     at android.app.Fragment.instantiate(Fragment.java:582) 
     at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2108) 
     at android.app.Activity.onCreateView(Activity.java:5431) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) 



Caused by: java.lang.ClassCastException 

XML РАСПОЛ для деятельности, что фрагмент придается

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context="mjj.fling.HowToPlayActivity" 
android:background="#01051D"> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/scrollView" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_marginTop="42dp" > 

    <fragment 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:name="mjj.fling.FragmentHowToPlay" 
     android:id="@+id/fragment" 
     tools:layout="@layout/fragment_fragment_how_to_play" /> 
</ScrollView> 

+0

опубликуйте свой макет. XML – Karakuri

+1

На самом деле, не смотря на это, я вижу проблему – Karakuri

ответ

2

Вы фрагмент простирается android.support.v4.app.Fragment вместо android.app.Fragment - см. декларацию импорта. Первый предназначен для использования FragmentActivity (или еще лучше нового AppCompatActivity) из библиотеки поддержки, а не с обычным android.app.Activity. Вам нужно изменить одно или другое и в целом быть последовательным в отношении того, что вы используете во всем приложении.

+0

. Итак, вы бы предложили вместо этого расширить FragmentActivity? –

+0

Хорошо, я изменил импорт и расширенный фрагмент. Без падений! –

Смежные вопросы