2017-09-04 88 views
1

我在我的片段中創建一個ListView並從簡單的字符串列表中獲取結果。ListView不加載項目

Item.java

public class Item implements Parcelable { 

    public String message; 

    public Item(String message) { 
     this.message = message; 
    } 


    protected Item(Parcel in) { 
     message = in.readString(); 
    } 

    public static final Creator<Item> CREATOR = new Creator<Item>() { 
     @Override 
     public Item createFromParcel(Parcel in) { 
      return new Item(in); 
     } 

     @Override 
     public Item[] newArray(int size) { 
      return new Item[size]; 
     } 
    }; 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(message); 
    } 
} 

item_layout.xml

<?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"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/item_text" 
      android:textSize="12sp"/> 

</LinearLayout> 

ListAdapter.java

public class ItemListAdapter extends ArrayAdapter<Item> { 

    public ItemListAdapter(Context context, ArrayList<Item> items) { 
     super(context, 0, items); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Get the data item for this position 
     Item item = getItem(position); 

     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_layout, parent, false); 
     } 

     TextView messageText = (TextView) convertView.findViewById(R.id.item_text); 

     messageText.setText(item.message); 

     return convertView; 
    } 
} 

BeveragesItemListFragment.java

public class BeveragesItemListFragment extends ListFragment { 

    private ArrayList<Item> array_of_items = new ArrayList<>();; 
    private List<String> bevs = Arrays.asList("קולה", "קולה זירו", "דיאט קולה", "נסטי אפרסק"); 

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

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

     TextView title = (TextView) v.findViewById(R.id.list_title); 
     title.setText("שתיה קלה"); 

     ItemListAdapter adapter = new ItemListAdapter(getActivity().getApplicationContext(), array_of_items); 

     for (String bev: bevs) { 
      Item newItem = new Item(bev); 
      adapter.add(newItem); 
     } 

     return v; 
    } 
} 

應用程序不會崩潰 - 片段加載其標題,一切看起來都很好。但是,我沒有在ListView中看到預定義的字符串。也許問題是我在ItemListAdapter初始化中通過的上下文嗎?

我試過把adapter.notifyDataSetChanged()但這也沒有幫助。

回答

2

之前所需return v;

ItemListAdapter adapter = new ItemListAdapter(getActivity().getApplicationContext(), array_of_items); 
    setListAdapter(adapter); 
// ^^^^^^^^^^^^^^^^ 
    return v; 

調用setListAdapter(adapter);和更改android:layout_height="match_parent"android:layout_height="wrap_content"以騰出空間給其他列表項

0

只需通過ListView.setAdapter將您的適配器設置爲ListView即可。適配器本身不會顯示任何東西。

0

你需要把下面的行返回語句上面。

for (String bev: bevs) { 
      Item newItem = new Item(bev); 
      array_of_items.add(newItem); 
     } 

ItemListAdapter adapter = new ItemListAdapter(getActivity(), array_of_items); 


    setListAdapter(adapter);