android - 如何使用自定义适配器对 listView 进行排序

标签 android sorting android-listview

我正在制作一个应用程序,其中显示状态为在线和离线的人数。 目前ListView是根据api设置的。我想根据人员的在线状态对 listView 进行排序。

例如。如果没有。的人在线,然后 ListView 首先显示他们。

我在我的项目中实现了延迟加载图像。

这是我的 MainActivity.class

public class MainActivity extends Activity {

ProgressDialog dialog;

static final String URL = "Some_URL";
// XML node keys
static final String KEY_RESPONSE = "Response"; // parent node
static final String KEY_NAME = "Name";
static final String KEY_DESCRIPTION = "Description";
static final String KEY_ID = "ConsultantID";
static final String KEY_OFFLINE = "OnlineStatus";
static final String KEY_THUMB_URL = "ProfilePicture";

ListView lv;
LazyAdapter adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    lv=(ListView)findViewById(R.id.list);




    ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();


    XMLfunctions parser = new XMLfunctions();
    String xml = parser.getXmlFromUrl(URL); // getting XML from URL
    Document doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_RESPONSE);
    // looping through all song nodes <song>
    for (int i = 0; i < nl.getLength(); i++) {
        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);
        // adding each child node to HashMap key => value
        map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
        map.put(KEY_DESCRIPTION, parser.getValue(e, KEY_DESCRIPTION));
        map.put(KEY_ID, parser.getValue(e, KEY_ID));
        map.put(KEY_OFFLINE, parser.getValue(e, KEY_OFFLINE));
        map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));

        // adding HashList to ArrayList
        songsList.add(map);
    }

     adapter=new LazyAdapter(this, songsList);
       lv.setAdapter(adapter);

       lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> Parent, View view, int Position,
                long Id) {
            // TODO Auto-generated method stub
            @SuppressWarnings("unchecked")
            HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(Position);
            Intent i = new Intent ("com.fedorvlasov.lazylist.SHOWLARGE");
            i.putExtra("ID",o.get(KEY_ID));
            i.putExtra("NAME", o.get(KEY_NAME));
            i.putExtra("DESCRIPTION",o.get(KEY_DESCRIPTION));
            i.putExtra("STATUS", o.get(KEY_OFFLINE));
            i.putExtra("IMAGE",o.get(KEY_THUMB_URL));
            startActivity(i);

            //Toast.makeText(LazyAdapter2.this, "position '" + adapter.getItem(Position) + "' was clicked.", Toast.LENGTH_LONG).show();



        }

    });

}

}

这是我的适配器类,名为 LazyAdater

public class LazyAdapter extends BaseAdapter {


private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader; 

public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());
}


public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return data.get(position);

}

public long getItemId(int position) {
    return position;
}



public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.list_row, null);


    TextView title = (TextView)vi.findViewById(R.id.title); // title name
    TextView description = (TextView)vi.findViewById(R.id.artist); // descriptiom
    TextView duration = (TextView)vi.findViewById(R.id.duration); // id
    TextView Status = (TextView)vi.findViewById(R.id.status); //status
    ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image

    HashMap<String, String> song = new HashMap<String, String>();
    song = data.get(position); 

    // Setting all values in listview
    title.setText(song.get(MainActivity.KEY_NAME));
    description.setText(song.get(MainActivity.KEY_DESCRIPTION));
    Status.setText(song.get(MainActivity.KEY_OFFLINE));
    duration.setText(song.get(MainActivity.KEY_ID));
    imageLoader.DisplayImage(song.get(MainActivity.KEY_THUMB_URL), thumb_image);
    return vi;


}}

我已经被一些比较者审查过..但我不明白如何实现它.. 提前致谢..

最佳答案

试试这个

Collections.sort(songsList, new MyCustomComparator());

public static class MyCustomComparator implements Comparator<HashMap<String, String>> {

    @Override
    public int compare(HashMap<String, String> lhs,
            HashMap<String, String> rhs) {
        if(lhs.get("onLineCheck") is true)
            return 1;
        else
            return -1;

        return 0;
    }

}

此行之前

adapter=new LazyAdapter(this, songsList);

关于android - 如何使用自定义适配器对 listView 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449256/

相关文章:

linq - 如何在linq查询中应用多个orderby

android - 如何更改 ListView 中每个项目的背景颜色?

java - 如何将我的 ListView 适配器转换为 RecyclerView 适配器?

android - 可用于 android 的 Web 服务器?

android - 禁用安卓蓝牙

android - 运行 ionic 时找不到 'ANDROID_HOME' 和 'android'

javascript - 如何接收输入的数字并将其移动到数组中并按升序排序?

android - 根据gridview android中的日期和时间对图像进行排序

android如何从listview header中获取元素

android - 当设备使用交流电源供电时,后台服务是否可以更频繁地唤醒?