2015-07-28 49 views
0

試圖遵循本教程: https://www.airpair.com/android/list-fragment-android-studio 並得到錯誤,找到ID爲0x無景觀...(com.example.user.fragmentlistexample:ID /容器)的片段ExampleItemFragment

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.fragmentlistexample/com.example.user.fragmentlistexample.MainActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f080002 (com.example.user.fragmentlistexample:id/container) for fragment ExampleItemFragment{2f05586b #1 id=0x7f080002} 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
     at android.app.ActivityThread.access$800(ActivityThread.java:151) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 

ExampleItemFragment的.java:

package com.example.user.fragmentlistexample; 

import android.app.Activity; 
import android.os.Bundle; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsListView; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.example.user.fragmentlistexample.dummy.DummyContent; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* A fragment representing a list of Items. 
* <p/> 
* Large screen devices (such as tablets) are supported by replacing the ListView 
* with a GridView. 
* <p/> 
* Activities containing this fragment MUST implement the {@link OnFragmentInteractionListener} 
* interface. 
*/ 
public class ExampleItemFragment extends Fragment implements AbsListView.OnItemClickListener { 

    // 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 List exampleListItemList; 

    private OnFragmentInteractionListener mListener; 

    /** 
    * The fragment's ListView/GridView. 
    */ 
    private AbsListView mListView; 

    /** 
    * The Adapter which will be used to populate the ListView/GridView with 
    * Views. 
    */ 
    private ListAdapter mAdapter; 

    // TODO: Rename and change types of parameters 
    public static ExampleItemFragment newInstance(String param1, String param2) { 
     ExampleItemFragment fragment = new ExampleItemFragment(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    /** 
    * Mandatory empty constructor for the fragment manager to instantiate the 
    * fragment (e.g. upon screen orientation changes). 
    */ 
    public ExampleItemFragment() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     exampleListItemList = new ArrayList(); 
     exampleListItemList.add(new ExampleListItem("Example 1")); 
     exampleListItemList.add(new ExampleListItem("Example 2")); 
     exampleListItemList.add(new ExampleListItem("Example 3")); 
     mAdapter = new ExampleListAdapter(getActivity(), exampleListItemList); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_example_item_list, container, false); 

     // Set the adapter 
     mListView = (AbsListView) view.findViewById(android.R.id.list); 
     ((AdapterView<ListAdapter>) mListView).setAdapter(mAdapter); 

     // Set OnItemClickListener so we can be notified on item clicks 
     mListView.setOnItemClickListener(this); 

     return view; 
    } 

    @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; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     ExampleListItem item = (ExampleListItem)this.exampleListItemList.get(position); 
     Toast.makeText(getActivity(), item.getItemTitle() + " Clicked!" 
       , Toast.LENGTH_SHORT).show(); 
    } 

    /** 
    * The default content for this Fragment has a TextView that is shown when 
    * the list is empty. If you would like to change the text, call this method 
    * to supply the text it should use. 
    */ 
    public void setEmptyText(CharSequence emptyText) { 
     View emptyView = mListView.getEmptyView(); 

     if (emptyView instanceof TextView) { 
      ((TextView) emptyView).setText(emptyText); 
     } 
    } 

    /** 
    * 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(String id); 
    } 

} 

MainActivity.java

package com.example.user.fragmentlistexample; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MainActivity extends Activity implements ExampleItemFragment.OnFragmentInteractionListener{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (savedInstanceState == null) { 
      getFragmentManager().beginTransaction() 
        .add(R.id.container, new ExampleItemFragment()) 
        .commit(); 
     } 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void onFragmentInteraction(String id){ 

    } 
} 

MainActivityFragment.java

package com.example.user.fragmentlistexample; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


/** 
* A placeholder fragment containing a simple view. 
*/ 
public class MainActivityFragment extends Fragment { 

    public MainActivityFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_main, container, false); 
    } 
} 

ActivityMain.xml

<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/fragment" 
    android:name="com.example.user.fragmentlistexample.MainActivityFragment" 
    tools:layout="@layout/fragment_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
/> 

fragment_example_item_list.xml

<ListView android:id="@android:id/list" android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<TextView android:id="@android:id/empty" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:gravity="center" /> 

個FragmentMain.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:id="@+id/container" 
    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=".MainActivityFragment"> 
</RelativeLayout> 

回答

0

在你MainActivity您使用setContentView(R.layout.activity_main);,然後使用

getFragmentManager().beginTransaction() 
       .add(R.id.container, new ExampleItemFragment()) 
       .commit(); 

這裏使用的是R.id.container這基本上是不存在於你的activity_main.xmlfragment_main.xml。這就是它的原因NullPointerException

如果您想從MainActivity訪問容器,請定義內部容器activity_main.xml

相關問題