2013-01-02 5 views
0

Dites-moi ce que j'ai fait de mal?Android - ListView in Fragment ne montre pas

J'essaie de remplir la feuille. Mais les données n'apparaissent pas dans ListView.

Par exemple, dans Activité, cela fonctionne. C'est ce code qui ne l'a pas essayé, mais copié d'où il a parfaitement fonctionné.

Les données sont précises, débogueur vérifié.

public class TabFilter extends Fragment { 

    private static String TAB_FILTER_LOG = "TabFilter: "; 
    private ArrayList<HashMap<String, Object>> filterListData; 
    private ListView filterListView; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     setHasOptionsMenu(true); 

     View view = inflater.inflate(R.layout.tab_filter, container, false); 

     filterListView = (ListView) view.findViewById(R.id.filtersListView); 
     filterListData = new ArrayList<HashMap<String, Object>>(); 

     fillListView(); 

     SimpleAdapter filtersListAdapter = new SimpleAdapter(getActivity().getBaseContext(), filterListData, R.layout.filters_list_view_row, new String[] { "name", 
       "nummer" }, new int[] { R.id.filterNameTv, R.id.filterInfoTv }); 

     filterListView.setAdapter(filtersListAdapter); 
     filterListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

     // filterListView.setOnItemClickListener(this); 

     if (container == null) { 
      return null; 
     } 
     return (LinearLayout) inflater.inflate(R.layout.tab_filter, container, false); 
    } 

    private HashMap<String, Object> fillListView() { 
     HashMap<String, Object> fillMap = null; 

     SQLiteDatabase db = DatabaseHelper.getInstance(getActivity().getBaseContext()).getWritableDatabase(); 
     Cursor cursor = db.query("filters", null, null, null, null, null, null); 

     if (cursor.moveToFirst()) { 

      int nameColIndex = cursor.getColumnIndex("name"); 
      int nummerColIndex = cursor.getColumnIndex("nummer"); 

      do { 
       fillMap = new HashMap<String, Object>(); 

       fillMap.put("name", cursor.getString(nameColIndex)); 
       fillMap.put("nummer", cursor.getString(nummerColIndex)); 
       filterListData.add(fillMap); 

      } while (cursor.moveToNext()); 

      cursor.close(); 
      db.close(); 
     } else { 
      Toast.makeText(getActivity().getBaseContext(), "0 ROWS: ", Toast.LENGTH_LONG).show(); 
     } 
     return fillMap; 
    } 
} 

tab_filter.xm

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

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

</LinearLayout> 

filters_list_view_row.xml

<?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:background="@color/BlueViolet"> 

    <TextView 
     android:id="@+id/filterNameTv" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:background="@color/LightGrey"/> 

    <TextView 
     android:id="@+id/filterInfoTv" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/LightSkyBlue" /> 

</LinearLayout> 

Répondre

4

Vous devez retourner l'objet de la vue dans onCreateView(). Vérifiez votre onCreateView() où vous créez l'objet View dans la première ligne et créez l'objet listview avec respect à la première vue Object. Enfin, vous gonflez un autre LinearLayout et le renvoyez. Donc, vous obtenez un écran vide.

Remplacez le code ci-dessous de votre:

if(container == null) { 
    return null; 
} 
return (LinearLayout)inflater.inflate(R.layout.tab_filter, container, false); 

avec ceci:

return view; 
+0

merci! Ça marche!)) – JDev

2

Vous gonfler une autre LinearLayout et en le retournant. Donc, vous obtenez l'écran vide Utilisez cette méthode au lieu de dessus

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 

    View view = inflater.inflate(R.layout.tab_filter, container, false); 

    filterListView = (ListView) view.findViewById(R.id.filtersListView); 
    filterListData = new ArrayList<HashMap<String, Object>>(); 

    fillListView(); 

    SimpleAdapter filtersListAdapter = new SimpleAdapter(getActivity().getBaseContext(), filterListData, R.layout.filters_list_view_row, new String[] { "name", 
       "nummer" }, new int[] { R.id.filterNameTv, R.id.filterInfoTv }); 

    filterListView.setAdapter(filtersListAdapter); 
    filterListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

    // filterListView.setOnItemClickListener(this); 

    if(container == null) { 
     return null; 
    } 
    return view; 
} 
+0

merci, ça marche! – JDev

0

j'avais problème équivalent de fragments ne semble pas. Et un problème était l'ordre des instructions XML, donc l'orientation apparaît avant « mise en page »:

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

    android:background="@color/BlueViolet"> 
...