2013-07-28 3 views
8

Ich weiß, dass es ähnliche Fragen gegeben hat, aber ich kann es nicht funktionieren, obwohl ich mir diese anschaue . Die Fehlermeldung lautet:java.lang.RuntimeException: Ihr Inhalt muss eine ListView haben, deren ID-Attribut ist "android.R.id.list"

java.lang.RuntimeException: Ihr Inhalt ein Listview, deren id Attribut haben muss, ist 'android.R.id.list'

. Ich habe versucht, die ID zur Liste zu ändern. In einem anderen. Das, was der Code wie folgt aussieht:

public class committeeFragment extends SherlockListFragment { 

    private CommitteeAdapter adapter; 

    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     adapter = new CommitteeAdapter(getActivity().getApplicationContext()); 
     setListAdapter(adapter); 
    } 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     return inflater.inflate(R.layout.fragment_committee, container, false); 
    } 

    public void 
    refreshList() { 
     adapter.updateDataSet(); 
     adapter.notifyDataSetChanged(); 
    } 
} 

Es ist die folgende Adapter:

public class CommitteeAdapter extends BaseAdapter { 
    private 
    ArrayList<StudentCommittee> committeeList; 
    private Context context; 

    public CommitteeAdapter(Context context) { 
     this.context = context; 
     CommitteeDatabaseAdapter dbAdapter = new CommitteeDatabaseAdapter(context); 
     committeeList = dbAdapter.readAllCommittees(); 
    } 

    public void updateDataSet() { 
     CommitteeDatabaseAdapter dbAdapter = new CommitteeDatabaseAdapter(context); 
     committeeList = dbAdapter.readAllCommittees(); 
    } 

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

     StudentCommittee committee = committeeList.get(position); 

     View v = vi.inflate(R.layout.list_item_committee, null); 
     TextView sectionName = (TextView) v.findViewById(R.id.committee_namn); 

     sectionName.setText(committee.getName()); 
     return v; 
    } 

    @Override 
    public int getCount() { 
     return committeeList.size(); 
    } 

    @Override 
    public StudentCommittee getItem(int position) { 
     return committeeList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
} 

Hier wird die XML-Datei, die die Liste (fragment_committee) angibt:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:tag="@string/tag_fragment_committee" 
    android:background="@color/white" > 

    <TextView 
     style="@style/AppsolutText.Headline" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Festerier" /> 

     <View 
     android:layout_width="fill_parent" 
     android:layout_height="2dp" 
     android:background="@drawable/divider_sliding_menu_item"/> 

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

    <TextView 
     style="@style/AppsolutText.Normal" 
     android:id="@android:id/empty" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="Uppdatera för att se en lista över festerier och fadderier. Kräver internetanslutning."/> 

</LinearLayout> 

Hier das xml für den Listeneintrag:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/committee_symbol" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" 
     android:paddingBottom="10dp" 
     android:paddingRight="10dp" 
     android:paddingTop="10dp" /> 

    <TextView 
     android:id="@+id/committee_namn" 
     style="@style/AppsolutText.ListHeader" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

</LinearLayout> 

Ich hoffe, dass Sie herausfinden können, was los ist. Ich habe eine andere Listenansicht, die dieselbe ID (Liste) in einer anderen XML-Datei innerhalb des Projekts hat. Ich weiß nicht, ob das ein Problem ist. Bitte helfen Sie mir, das Problem zu lösen.

+0

möglich Duplikat von [ListView innerhalb eines Fragments gibt Fehler] (http://stackoverflow.com/questions/12294819/listview-inside-a-fragment-gives-error) – Raghunandan

+0

poste deine R.java-Klasse –

Antwort

23

Das Problem ist hier:

android:id="@+id/list" 

Sie eine neue ID für Ihre Listview hinzufügen aber ListFragment benötigt eine Standard-Android Listview-Id

Änderung Ihrer Listview-Id:

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

@Arash if Wir wollen mit dieser Listenansicht Klick-Listener implementieren. Wie können wir das erreichen? – AndroidOptimist

+0

@Alliswell: Sie müssen überschreiben öffentlichen void onListItemClick (ListView Eltern, Ansicht v, int Position, lange ID) \t {}. hoffe, es hilft –

+0

@Arash Ich möchte Kind listview von jeder Zeile öffnen, ohne Adapterklasse zu verwenden. Kannst du mir ein Beispiel dafür geben – AndroidOptimist

5

Ändern Sie Ihre ListView in XML, um die folgenden zu haben g-ID:

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

Es ist eine Anforderung von ListFragment/SherlockListFragment

http://developer.android.com/reference/android/app/ListFragment.html

ListFragment mit hat ein Standard-Layout, das aus einer einzigen Listenansicht besteht. Wenn Sie möchten, können Sie das Fragmentlayout jedoch anpassen, indem Sie Ihre eigene Ansichtshierarchie von onCreateView(LayoutInflater, ViewGroup, Bundle) zurückgeben. Um dies zu tun, Ihre Ansicht Hierarchie muss ein Listview-Objekt mit der ID enthält „@android: id/list“ (oder list wenn es im Code ist)

+0

muss nicht android für id verwenden. Android: ID = "@ + ID/ListIdName". es ist auch korrekt –

+0

Wenn Sie 'ListFragment' verwenden, werden Sie andernfalls Fehler erhalten. –

0

Sie können versuchen, Ihr Projekt zu reinigen. Wenn irgendein xml releded Fehler hat, kannst du es finden. Dann können Sie Ihre Listen-ID ändern. Finden Sie die Liste ID sind in Ihrem Gen-Ordner R.Java Klasse vorhanden.

0

Ich entschied mich dafür, die Verwendung von actionbarsherlock zu beenden und stattdessen die Unterstützungsbibliotheken zu verwenden, um Aktionsleiste in Android 2.1 und höher zu erhalten. Nachdem ich dies getan habe, habe ich die "java.lang.RuntimeException: Ihr Inhalt muss eine ListView haben, deren ID-Attribut ist" android.R.id.list "".Was ich tat, um dieses Problem zu beheben, wurde

diesen von

http://developer.android.com/reference/android/app/ListFragment.html#q=fragment

dann meine Fragment-Layout-Datei ändern

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/item_detail" 
    style="?android:attr/textAppearanceLarge" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="16dp" 
    android:textIsSelectable="true" 
    tools:context=".ItemDetailFragment" /> 

zu

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="8dp" 
    android:paddingRight="8dp" 
    tools:context=".ItemDetailFragment"> 

<ListView android:id="@id/android:list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#00FF00" 
      android:layout_weight="1" 
      android:drawSelectorOnTop="false"/> 

<TextView android:id="@+id/item_detail" 
     style="?android:attr/textAppearanceLarge" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:padding="16dp" 
     android:textIsSelectable="true"/> 

<TextView android:id="@id/android:empty" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#FF0000" 
      android:text="No data"/> 

zu lesen ... und voila, die RunTimeException mit der fehlenden android.R.id.list war weg! Natürlich muss ich mein neues Layout bearbeiten und es richtig beheben, aber das Hauptproblem hier war, dass ich das Fragment-Layout in seiner OnCreateView-Methode überschrieben hatte. ActionBarSherlock HAT KEIN Problem damit, aber mit der Android-Support-Bibliothek MÜSSEN Sie, wenn Sie dies tun, eine ListView in Ihrem XML-Layout haben, mit dem Android: id = "@ id/android: list" wie in der Info angegeben nach oben verlinkt.

Hoffe, dass dies hilft (aus einer Gesamtzahl Newb in Android App Entwickler)!

+0

Ich möchte zu dieser Info hinzufügen, dass, da ich ListFragment verwendete, ich kein ListView-Tag in XML irgendwo für dieses ListFragment hatte. Das ListView ist in dem ListFragment integriert aber kann überschrieben werden. Deshalb konnte ich nicht nur die ListView android: id so viele Leute vorschlagen, weil ich keine ListView-Tags in XML zu meinem ListFragment finden konnte. Daher die obige Lösung - um eins hinzuzufügen! – TiredDude

+0

Ein weiterer Kommentar zu meinem eigenen Post oben: Ich bin so ein Total Newb zu diesem Thema und denke, ich habe ein ListFragment verwendet, wenn ich nicht eine Liste an erster Stelle wollte. Es ist sinnvoll, dass ein ListFragment mindestens eine ListView benötigt. Ich werde einen anderen Typ von Fragment verwenden, so dass ich kein unbenutztes ListView in meinem XML implementieren muss, nur um die RunTimeException loszuwerden. Gaah! – TiredDude

Verwandte Themen