2013-10-05 93 views
1

我試着做一個列表視圖但是Eclipse說我沒有一個名爲list列表視圖,雖然我有很清楚:的的ListView一個ListFragment崩潰裏面雖然在它@ ID /列表

版式文件片段:

<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" 
    tools:context=".ListActivity" > 

    <View 
     android:id="@+id/line2" 
     android:layout_width="fill_parent" 
     android:layout_height="0.5dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentBottom="true" 
     android:background="@android:color/black" 
     android:layout_below="@+id/list"/> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 
    </ListView> 

</RelativeLayout> 

而片段java(「ListActivity」是一個片段,而不是一個活動)。

它嵌套在另一個活動中。

import android.os.Bundle; 
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.Toast; 

public class ListActivity extends ListFragment { 

    static final String[] MOBILE_OS = 
      new String[] { "Android", "iPhone", "WindowsMobile", 
        "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
        "Linux", "OS/2" }; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.activity_list, container, false);  
     } 
// 
// @Override 
// public void onStart() { 
//  super.onStart(); 
//  
//  setListAdapter(new MobileArrayAdapter(getActivity(), MOBILE_OS)); 
// } 

    @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
      "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
      "Linux", "OS/2" }; 
     ListView list = (ListView)getView().findViewById(R.id.list); 
     list.setAdapter(new MobileArrayAdapter(getActivity(), values)); 
     } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 

     //get selected items 
     String selectedValue = (String) getListAdapter().getItem(position); 
     Toast.makeText(getActivity(), selectedValue, Toast.LENGTH_SHORT).show(); 

    } 

    public void onBackPressed() { 

    } 


} 

和適配器:

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class MobileArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public MobileArrayAdapter(Context context, String[] values) { 
     super(context, R.layout.list_item, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.list_item, parent, false); 
     TextView title = (TextView) rowView.findViewById(R.id.title); 

     title.setText("  "+values[position]); 

     // Change icon based on name 
     String s = values[position]; 

     System.out.println(s); 

     return rowView; 
    } 
} 

的logcat:

10-05 20:37:58.824: W/dalvikvm(6515): threadid=1: thread exiting with uncaught exception (group=0x41064300) 
10-05 20:37:58.828: E/AndroidRuntime(6515): FATAL EXCEPTION: main 
10-05 20:37:58.828: E/AndroidRuntime(6515): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.free/com.example.free.Fragments}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2185) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2210) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.app.ActivityThread.access$600(ActivityThread.java:142) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.os.Looper.loop(Looper.java:137) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.app.ActivityThread.main(ActivityThread.java:4931) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at dalvik.system.NativeStart.main(Native Method) 
10-05 20:37:58.828: E/AndroidRuntime(6515): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.support.v4.app.ListFragment.ensureList(ListFragment.java:344) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.support.v4.app.ListFragment.onViewCreated(ListFragment.java:145) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:556) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.app.Activity.performStart(Activity.java:5018) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
10-05 20:37:58.828: E/AndroidRuntime(6515):  ... 11 more 

有什麼不對嗎?

回答

1

變化

android:id="@+id/list" 

android:id="@android:id/list" 

android:id="@+id/list"爲您ListView創建一個新的ID( '名單'),但你必須引用,並已經從框架中,當您使用現有標識一個ListFragment,即身份證'列表',但從框架說,從框架。因此你必須在它前面寫上名字空間'android'。

+0

和如果我想在我的片段多個listViews? – NirPes

+0

那麼,你必須使用正常的片段,而不是一個listFragment – Ahmad

+0

但是,然後我的適配器崩潰..它會導致一個'NullPointerExeption' .. – NirPes