2016-01-28 16 views
0

here on header I use button for sort data in table and dynamically I want to change up and down arrow.如何顯示上TableFixHeaders

我使用InqBarna圖書館用於顯示在表格形式數據排序按鈕。點擊表格標題上的排序按鈕時,我遇到了排序按鈕更改(升序和降序)的問題。請幫忙。

這裏的代碼片段。

private View getHeader(int row, int column, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = activity.getLayoutInflater().inflate(R.layout.item_table_header, parent, false); 
    } 
    convertView.setBackgroundResource(column % 2 == 0 ? R.color.header_dark_gray : R.color.header_light_gray); 

    ((TextView) convertView.findViewById(android.R.id.text1)).setText(headers[column + 1]); 
    imageButtons[column +1] = ((ImageButton) convertView.findViewById(R.id.sortButton)); 
    imageButtons[column +1].setTag(headers[column + 1]); 
    imageButtons[column +1].setOnClickListener(onClickListener); 

    return convertView; 
} 

View.OnClickListener onClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     ImageButton imageButton =(ImageButton)v.findViewWithTag(v.getTag()); 
     String header = v.getTag().toString(); 

     switch (header) { 
     // logic for change image 
      case Query.AQ_NO: 
       if (AQ_NO_FLAG) { 
        imageButton.setImageResource(R.drawable.sort_asc); 
        } 
       break; 
     } 
} 
+0

請添加您的代碼片段 – phoenix

+0

請幫助感謝先進 – changulpaye

回答

0

它可以幫助你。 這是一個wrapper for InqBarna's library

這是如何實現排序標題的代碼片段。無論如何,你將不得不看到whole example瞭解它是如何工作的。

在這裏,您呈現頭視圖:

public class OriginalHeaderCellViewGroup extends FrameLayout 
    implements 
    TableFixHeaderAdapter.HeaderBinder<ItemSortable> { 

private Context context; 
public TextView textView; 
public ImageView iv_order_asc, iv_order_desc; 

public OriginalHeaderCellViewGroup(Context context) { 
    super(context); 
    this.context = context; 
    init(); 
} 

private void init() { 
    LayoutInflater.from(context).inflate(R.layout.text_sotable_view_group, this, true); 
    textView = (TextView) findViewById(R.id.tv_text); 
    iv_order_asc = (ImageView) findViewById(R.id.iv_order_asc); 
    iv_order_desc = (ImageView) findViewById(R.id.iv_order_desc); 
} 

@Override 
public void bindHeader(ItemSortable item, int column) { 
    textView.setText(item.text.toUpperCase()); 
    drawOrderArrows(item.order); 
} 

private void drawOrderArrows(int order) { 
    iv_order_desc.setImageResource(order == -1 ? R.drawable.ic_arrow_drop_up_24dp : R.drawable.ic_arrow_drop_up_24dp_disabled); 
    iv_order_asc.setImageResource(order == 1 ? R.drawable.ic_arrow_drop_down_24dp : R.drawable.ic_arrow_drop_down_24dp_disabled); 
} 

,在這裏您將聆聽到表適配器和進行排序:

private void setListeners(final OriginalSortableTableFixHeaderAdapter adapter) { 
    TableFixHeaderAdapter.ClickListener<ItemSortable, OriginalHeaderCellViewGroup> clickListenerHeader = new TableFixHeaderAdapter.ClickListener<ItemSortable, OriginalHeaderCellViewGroup>() { 
     @Override 
     public void onClickItem(ItemSortable item, OriginalHeaderCellViewGroup viewGroup, int row, int column) { 
      updateOderIndicators(item, column, adapter); 
      boolean orderAsc = item.order == 1; 
      boolean orderSectionsAsc =firstHeader.orderSectionsAsc; 
      applyOrder(orderAsc, orderSectionsAsc, column, adapter); 
     } 
    }; 

    adapter.setClickListenerHeader(clickListenerHeader); 
} 


private void updateOderIndicators(ItemSortable item, final int column, TableFixHeaderAdapter adapter) { 
    final boolean orderAsc = item.order == 1; 
    firstHeader.order = 0; 
    for (ItemSortable itemAux : header) itemAux.order = 0; 
    item.order = !orderAsc ? 1 : -1; 
} 

private void applyOrder(final boolean orderAsc, final boolean orderSectionsAsc, final int column, TableFixHeaderAdapter adapter) { 
    Collections.sort(body, new Comparator<NexusWithImage>() { 
     @Override 
     public int compare(NexusWithImage nexus1, NexusWithImage nexus2) { 
      if (nexus1.isSection() || nexus2.isSection()) return 1; 
      else if (orderAsc) 
       return nexus1.data[column + 1].compareToIgnoreCase(nexus2.data[column + 1]); 
      else 
       return nexus2.data[column + 1].compareToIgnoreCase(nexus1.data[column + 1]); 
     } 
    }); 

    adapter.setBody(body); 
} 

希望它可以幫助你。