2012-11-09 21 views
1

Mockup 所以我想在下面創建這個UI。這是一個大學課程,我沒有太多時間了。我有一切工作,但我無法圍繞製作事件清單。我有一個java類eventList,它使用數據庫中的數據填充List。有什麼建議麼?我需要動態添加2個按鈕(上/下)和足夠的文本視圖來提供數據嗎?如果我做這樣的事情,我將如何保持格式化?我應該把它放在主頁上的滾動視圖中嗎?Databind android中的複雜列表

+1

這個線框是否顯示了三個事件的列表,其中每個事件都有一個向上/向下按鈕到左邊,並且(可能)是這些按鈕之間的一個ID? – 323go

+0

@ 323go是的,但數字是從數據庫中提取的該事件的總投票數。每個用戶都可以向上或向下投票。 –

+1

哦,那些投票按鈕... – 323go

回答

1

使用自定義適配器將其設置爲ListView。每行可以被設計爲RelativeLayout,所以你可以把你的事件名稱,位置等。

適配器將是這個樣子:(代碼消毒)

public class POPublicationAdapter extends ArrayAdapter<Wrap<POUserPublication>> { 
    private final Context context; 
    ... 
    private OnClickListener faveClick; 
    private OnClickListener shortClick; 
    ... 

    public POPublicationAdapter(Context context, List<WrapPO<POUserPublication>> values, 
      OnClickListener faveClick, OnClickListener shortClick, ...) { 
     super(context, R.layout.row_publication, values); 
     this.context = context; 
     this.listId = listId; 
     this.faveClick = faveClick; 
     this.shortClick = shortClick; 
      ... 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     WrapPO<POUserPublication> item = getItem(position); 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = null; 

     if(item.item != null){ 
      rowView = inflater.inflate(R.layout.row_publication, parent, false); 
      rowView.setTag(item); 
      TextView tvLabel = (TextView) rowView.findViewById(R.id....); 
      ImageView ivPubFavorite = (ImageView) rowView.findViewById(R.id....); 

      TextView tvSubLabel = (TextView) rowView.findViewById(R.id.publicationSublabel); 
      tvLabel.setText(item.item.pub().get(PO.displayName)); 
      if(!item.item.pub().existsDefault()) { 

      } 
      if(listId == POLayer.LIST_REQUIRED) 
       tvSubLabel.setText(String.format("(Due on %1$TD)", item.item.asDate(PO.dueDate))); 
      else if(listId == POLayer.LIST_PREVIEW) 
       tvSubLabel.setText(String.format("(Preview until %1$TD)", item.item.pub().asDate(PO.distributionDate))); 
      else 
       tvSubLabel.setText(item.item.getTouchInfo()); 

      if(this.listId == POLayer.LIST_FAVE){ 
       setOfflineImage(ivPubFavorite, SG.isOnline, item.item.isFavorite() ? R.drawable.ls_star_remove : R.drawable.ls_star_grey); 
      } else { 
       setOfflineImage(ivPubFavorite, SG.isOnline, item.item.isFavorite() ? R.drawable.ls_star_gold : R.drawable.ls_star_grey); 
      } 
      ivPubFavorite.setClickable(true); 
      ivPubFavorite.setTag(item); 
      ivPubFavorite.setOnClickListener(faveClick); 

      ivNot.setClickable(false); 
      if(listId == POLayer.LIST_REQUIRED || listId == POLayer.LIST_UNREAD) { 
       ivNot.setTag(item); 
       ivNot.setOnClickListener(notClick); 
       if(item.item.isRequired()) { 
        if(item.item.isComplete()) { 
         setOfflineImage(ivNot, item.item.asString(PO.offlineUTC).isEmpty(), R.drawable.ls_doc_confirmed); 
        } else { 
         ivNot.setClickable(true); 
         ivNot.setImageResource(R.drawable.ls_doc_pencil); 
        } 
       } else { 
        if(item.item.isComplete()) { 
         ivNot.setImageResource(R.drawable.ls_check_green); 
        } else { 
         ivNot.setClickable(true); 
         setOfflineImage(ivNot, SG.isOnline, R.drawable.ls_check_grey); 
        } 
       } 
      } else { 
       ivNot.setVisibility(View.GONE); 
      } 
     } else { 
      switch(item.itemType) { 
      case WrapPO.HEADER_EMPTY: 
       rowView = inflater.inflate(R.layout.row_header_empty, parent, false); 
       break; 
      case WrapPO.HEADER_MORE: 
       rowView = inflater.inflate(R.layout.row_header_more, parent, false); 
       break; 
      default: 
       rowView = inflater.inflate(R.layout.row_header, parent, false); 
      } 
      TextView tvLabel = (TextView) rowView.findViewById(R.id.tvHeader); 
      tvLabel.setText(item.itemHeader); 
     } 
     rowView.setOnLongClickListener(longClick); 
     rowView.setOnClickListener(shortClick); 
     return rowView; 
    } 
    @Override 
    public long getItemId(int position) { 
     if(getItem(position).item != null) 
      return getItem(position).item.asInteger(PO.pubId); 
     else 
      return (long) -1; 
    } 
} 

這可能是你所需要的更復雜一點的例子,但它說明了如何使用不同的佈局基礎上,一排行的內容,並且它裏面有可點擊的ImageViews,就像你需要投票按鈕一樣。

+0

所以你使用inflater。這段代碼是Fragment UI的一個特性嗎? –

+0

這可能正是我所需要的。我將不得不等待,直到後來嘗試。謝謝。 –

+1

就Fragments而言,這可能在一個片段內,但佈局充氣器是Android的一個組成部分,並且自API 1以來一直存在。請注意,此代碼不會執行convertView或任何其他類型的(推薦)資源保存。 – 323go