2017-04-15 37 views
2

我试图发送此ArrayList:收集3周的ArrayList到一个和一个自定义的ListView查看它

all1 = all.toArray(new String[all.size()]); 

这是一个JSON解析这三个数组列表的总和:

for (int j = 0; j < itemNames.size(); j++) { 
       all.add(brandNames.get(j) + " " + itemNames.get(j) + " " + Carbs.get(j)); 
      } 

自定义列表视图,但无法设置适配器。

我有一个自定义列表视图如下(search_list_view):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:padding="@dimen/activity_horizontal_margin"> 

<!-- layout child --> 
<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <!-- Edit button --> 
    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:text="@string/add" 
     android:id="@+id/btnAdd" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" /> 


</RelativeLayout> 

<!-- Text view for main text --> 
<TextView 
    android:id="@+id/brandName" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="10dp" 
    android:text="Item Name" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 
</LinearLayout> 

我明白我需要一个定制的适配器到目前为止,我有这一点,但它不工作:

private class FoodAdapter extends ArrayAdapter<Food> { 


    public FoodAdapter(Context context, List<Food> objects) { 
     super(context, 0, objects); 
    } 

    //inflate view layout_list_item 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = 
getLayoutInflater().inflate(R.layout.search_list_item, parent, false); 
     } 
     //link buttons to views within layout_list_item 
     Button btnAdd = (Button) convertView.findViewById(R.id.btnAdd); 
     TextView txtMemo = (TextView) 
convertView.findViewById(R.id.brandName); 
return convertView; 

我型号如下:

public class Food implements Serializable { 
//set variables 
private Date date; 
private String text; 
private boolean fullDisplayed; 
private static DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyy 'at' hh:mm aaa"); 
//memo date 
public Food() { 
    this.date = new Date(); 
} 
//create Food 
public Food(long time, String text) { 
    this.date = new Date(time); 
    this.text = text; 
} 
//get time 
public long getTime() { 
    return date.getTime(); 
} 
//set text 
public void setText(String text) { 
    this.text = text; 
} 
//get text 
public String getText() { 
    return this.text; 
} 

//get shortened version of text for not full displayed 
public String getShortText() { 
    String temp = text.replaceAll("\n", " "); 
    if (temp.length() > 25) { 
     return temp.substring(0, 25) + "..."; 
    } else { 
     return temp; 
    } 
} 
//set full displayed 
public void setFullDisplayed(boolean fullDisplayed) { 
    this.fullDisplayed = fullDisplayed; 
} 
//set flag for if is full displayed 
public boolean isFullDisplayed() { 
    return this.fullDisplayed; 
} 
//set a toString method for returning text. 
@Override 
public String toString() { 
    return this.text; 
} 
} 
+1

什么不工作?它不显示屏幕上的任何东西吗?它不填充数据或..的项目?!它甚至进入getView()? – AndreiBogdan

回答

0

您尚未在getView中为TextView设置数据。您必须从列表中获取该位置的数据,并使用Food类的getText方法填充到TextView中。

与下面的代码替换你的适配器代码:

private class FoodAdapter extends ArrayAdapter<Food> { 
    private List<Food> mObjects; 

    public FoodAdapter(Context context, ArrayList<Food> objects) { 
     super(context, 0, objects); 
     mObjects = new ArrayList<Food> (objects); 
    } 

    //inflate view layout_list_item 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = 
getLayoutInflater().inflate(R.layout.search_list_item, parent, false); 
     } 
     //link buttons to views within layout_list_item 
     Button btnAdd = (Button) convertView.findViewById(R.id.btnAdd); 
     TextView txtMemo = (TextView) 
convertView.findViewById(R.id.brandName); 
    txtMemo.setText(mObjects.get(position).getText()); 
return convertView; 

注意 - 在上面的代码,同时创造我创建了一个ArrayList的名单。 List是一个接口,当你创建一个实例时,你必须用一个类来创建它,比如ArrayList或LinkedList。因此,当你调用适配器时,ArrayList不是List。

相关问题