如何根据当前的字段对适配器 (BaseAdapter) 进行排序 [英] How to sort adapter (BaseAdapter) based on current its field

查看:16
本文介绍了如何根据当前的字段对适配器 (BaseAdapter) 进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 listviewadapter ,它包含一些字段,如:状态、备注、销售名称、插入日期(txtTgglInsert)、图像.我想做基于 insertdate(txtTgglInsert) 降序排序(基于最近的状态).我怎么能在我的程序上通过调用这个适配器来做这个?

I have listviewadapter , it contains some fields like : status, notes, salesname, insertdate (txtTgglInsert), image. I want to do sorting based insertdate(txtTgglInsert) descending(based on recent status). How could I do this one on my programm with calling this adapter?

我的适配器:

import java.net.URL;
import java.text.DecimalFormat;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class ListViewTimelineAdapter extends BaseAdapter{
    private static ArrayList<URLPostClass> DataProcessorResult;
    private LayoutInflater myInflater;
    Context mycontext;

    public ListViewTimelineAdapter(Context context, ArrayList<URLPostClass> results) {
        DataProcessorResult = results;
        myInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        //Log.d("count", String.valueOf(DataProcessorResult.size()));
        return DataProcessorResult.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return DataProcessorResult.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }   

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
        final ViewHolder holder; 
        final Context mycontext=parent.getContext();       

        if(convertView == null) {
            convertView = myInflater.inflate(R.layout.custom_viewtimeline, null);
            holder = new ViewHolder();
            holder.txtJenisStatus = (TextView) convertView.findViewById(R.id.jenisstatus);
            holder.txtStatus = (TextView) convertView.findViewById(R.id.status);
            holder.txtSales = (TextView) convertView.findViewById(R.id.sales);
            holder.txtTgglInsert = (TextView) convertView.findViewById(R.id.tgglinsert);

            holder.imgPosting= (ImageView) convertView.findViewById(R.id.imgposting);
            convertView.setTag(holder);            
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        holder.txtJenisStatus.setText(DataProcessorResult.get(position).getJenisStatus());
        holder.txtStatus.setText(DataProcessorResult.get(position).getRemark());
        holder.txtSales.setText(DataProcessorResult.get(position).getNamaSales());
        holder.txtTgglInsert.setText(DataProcessorResult.get(position).getTgglInsert());

        holder.txtStatus.setTextSize(TypedValue.COMPLEX_UNIT_PX, mycontext.getResources().getDimensionPixelSize( R.dimen.lbltitlelistviewitem));
        holder.txtJenisStatus.setTextSize(TypedValue.COMPLEX_UNIT_PX, mycontext.getResources().getDimensionPixelSize( R.dimen.lbllistviewitem));
        holder.txtSales.setTextSize(TypedValue.COMPLEX_UNIT_PX, mycontext.getResources().getDimensionPixelSize( R.dimen.lbllistviewitem));
        holder.txtTgglInsert.setTextSize(TypedValue.COMPLEX_UNIT_PX, mycontext.getResources().getDimensionPixelSize( R.dimen.lbllistviewitem));

        try {
            String image_url = DataProcessorResult.get(position).getPath();

            if (image_url.length()>0) {
                ImageLoader imgLoader = new ImageLoader(mycontext); 
                imgLoader.DisplayImage(image_url, 0, holder.imgPosting);
                holder.imgPosting.getLayoutParams().width= mycontext.getResources().getDimensionPixelSize( R.dimen.photolistviewitem);
                holder.imgPosting.getLayoutParams().height= mycontext.getResources().getDimensionPixelSize( R.dimen.photolistviewitem);             
            }else {
                holder.imgPosting.setVisibility(View.GONE);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            //Toast.makeText(mycontext, e.toString(), Toast.LENGTH_SHORT).show();
        }

        //if (position % 2 == 1) {convertView.setBackgroundColor(Color.WHITE);} else {convertView.setBackgroundColor(Color.rgb(208,212,208)); }        
        return convertView;
    } 
    static class ViewHolder { 
        TextView txtJenisStatus;
        TextView txtStatus;
        TextView txtSales;
        TextView txtTgglInsert;
        ImageView imgPosting;
    }

}

推荐答案

由于您的 Adapter 基于对象的 ArrayList,您可以将实现更改为子类 <代码>ArrayAdapter(文档:http://developer.android.com/reference/android/widget/ArrayAdapter.html)

Since your Adapter is based on an ArrayList of objects, you can change your implementation to subclass ArrayAdapter (Docs: http://developer.android.com/reference/android/widget/ArrayAdapter.html)

public class ListViewTimelineAdapter extends ArrayAdapter<URLPostClass> {

在那之后,排序将是微不足道的:

after that, sorting would be trivial:

ArrayList<URLPostClass> myListData = ...
ArrayAdapter<URLPostClass> adapter = new MyArrayAdapter<URLPostClass>(context, R.layout.my_layout, myListData);
adapter.sort(new Comparator<URLPostClass>() {

    @Override public int compare(URLPostClass lhs, URLPostClass rhs) {
        return rhs.getTgglInsert().compareTo(lhs.getTgglInsert()); // flipped for reverse order
    }

});
myListView.setAdapter(adapter);

这篇关于如何根据当前的字段对适配器 (BaseAdapter) 进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆