Android 如何根据当前its字段对适配器(BaseAdapter)进行排序
我有listviewadapter,它包含一些字段,如:状态、注释、salesname、insertdate(txtgglinsert)、图像。我想根据insertdate(txtTgglInsert)降序(基于最近的状态)进行排序。我如何通过调用这个适配器在我的程序上实现这一点 我的适配器:Android 如何根据当前its字段对适配器(BaseAdapter)进行排序,android,sorting,adapter,Android,Sorting,Adapter,我有listviewadapter,它包含一些字段,如:状态、注释、salesname、insertdate(txtgglinsert)、图像。我想根据insertdate(txtTgglInsert)降序(基于最近的状态)进行排序。我如何通过调用这个适配器在我的程序上实现这一点 我的适配器: import java.net.URL; import java.text.DecimalFormat; import java.util.ArrayList; import android.app.A
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;
}
}
import java.net.URL;
导入java.text.DecimalFormat;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.content.Context;
导入android.graphics.Color;
导入android.util.Log;
导入android.util.TypedValue;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类ListViewTimelineAdapter扩展了BaseAdapter{
私有静态ArrayList DataProcessorResult;
私人充气机;
语境;
公共ListViewTimelineAdapter(上下文、ArrayList结果){
DataProcessorResult=结果;
myInflater=LayoutInflater.from(上下文);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
//Log.d(“count”,String.valueOf(DataProcessorResult.size());
返回DataProcessorResult.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回DataProcessorResult.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
最终持票人;
final Context mycontext=parent.getContext();
if(convertView==null){
convertView=myInflater.inflate(R.layout.custom_viewtimeline,null);
holder=新的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.txtgglinsert=(TextView)convertView.findViewById(R.id.tgglinsert);
holder.imgPosting=(ImageView)convertView.findViewById(R.id.imgPosting);
convertView.setTag(支架);
}否则{
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.txtgglinsert.setText(DataProcessorResult.get(position.gettglinsert());
holder.txtStatus.setTextSize(TypedValue.COMPLEX\u UNIT\u 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.txtgglinsert.setTextSize(TypedValue.COMPLEX_UNIT_PX,mycontext.getResources().getDimensionPixelSize(R.dimen.lbllistviewitem));
试一试{
字符串image_url=DataProcessorResult.get(position.getPath();
if(image_url.length()>0){
ImageLoader imgLoader=新的ImageLoader(mycontext);
显示图像(图像url,0,holder.imgPosting);
holder.imgPosting.getLayoutParams().width=mycontext.getResources().getDimensionPixelSize(R.dimen.photolistviewitem);
holder.imgPosting.getLayoutParams().height=mycontext.getResources().getDimensionPixelSize(R.dimen.photolistviewitem);
}否则{
holder.imgPosting.setVisibility(View.GONE);
}
}捕获(例外e){
//TODO自动生成的捕捉块
//Toast.makeText(mycontext,e.toString(),Toast.LENGTH_SHORT).show();
}
//if(位置%2==1){convertView.setBackgroundColor(Color.WHITE);}else{convertView.setBackgroundColor(Color.rgb(208212208));}
返回视图;
}
静态类视图持有者{
TextView-txtJenisStatus;
TextView txtStatus;
TextView txtSales;
TextView txtgglinsert;
图像视图imgPosting;
}
}
由于适配器
基于对象的数组列表
,因此可以将实现更改为子类数组适配器
(文档:)
公共类ListViewTimelineAdapter扩展了ArrayAdapter{
在此之后,排序将变得微不足道:
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);
ArrayList myListData=。。。
ArrayAdapter=新的MyArrayAdapter(上下文,R.layout.my_布局,myListData);
adapter.sort(新的比较器(){
@重写公共int比较(URLPostClass lhs、URLPostClass rhs){
返回rhs.gettgleInsert().compareTo(lhs.gettgleInsert());//按相反顺序翻转
}
});
myListView.setAdapter(适配器);
考虑到您有一个日期字段,您的Comaparator类应该是这样的
public class CustomDateComparator implements Comparator<DataProcessorResult> {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("dd MMM yyyy");
@Override
public int compare(DataProcessorResult lhs, DataProcessorResult rhs) {
// TODO Auto-generated method stub
Date lhsDate = null;
Date rhsDate = null;
try {
lhsDate = simpleDateFormat.parse(lhs.getTgglInsert());
rhsDate = simpleDateFormat.parse(rhs.getTgglInsert());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(lhsDate == rhsDate) {
return lhs.getNamaSales().compareToIgnoreCase(rhs.getNamaSales());
}else {
return lhsDate.compareTo(rhsDate);
}
}
}
在将其传递给自定义适配器类之前
希望这对您有所帮助。尝试使用Collections.sort()。您可以编写一个自定义的comparator类,根据日期(insertdate)进行比较然后将排序后的列表传递给适配器。如果需要,我也可以帮助您完成代码。:@VikramV:您可以帮助我吗?添加了一个新的答案-这样编译器就可以自动对其进行排序?无需将转换日期转换为微秒,因为在PHP中,我需要转换它。您所说的“转换”是什么意思?在Java中,
Da
public class CustomDateComparator implements Comparator<DataProcessorResult> {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("dd MMM yyyy");
@Override
public int compare(DataProcessorResult lhs, DataProcessorResult rhs) {
// TODO Auto-generated method stub
Date lhsDate = null;
Date rhsDate = null;
try {
lhsDate = simpleDateFormat.parse(lhs.getTgglInsert());
rhsDate = simpleDateFormat.parse(rhs.getTgglInsert());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(lhsDate == rhsDate) {
return lhs.getNamaSales().compareToIgnoreCase(rhs.getNamaSales());
}else {
return lhsDate.compareTo(rhsDate);
}
}
}
Collections.sort(results, new CustomDateComparator());