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

2024-03-01

我正在制作一个应用程序,其中显示状态为在线和离线的人数。 目前ListView是根据api设置的。我想根据人员的在线状态对 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;


}}

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


try this

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

and

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用自定义适配器对 listView 进行排序 的相关文章

随机推荐

  • Apache URL 重写,

    我正在尝试让 URL 重写在我的网站上运行 这是我的 htaccess 的内容 RewriteEngine On RewriteRule blog index php page blog L RewriteRule about index
  • 对“cvCreateKalman”的未定义引用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我一直在开
  • 使用剪贴板 API 时 Chrome 中的构造函数非法?

    我目前正在构建一个网络应用程序 它是我很久以前用 Visual Basic 编写的另一个程序的翻译 在 Visual Basic 中 可以将数据直接放入操作系统的剪贴板中 Chrome 中有执行此操作的功能吗 我试过了 var magice
  • 在基于nx的nodejs应用程序中使用环境变量

    我已经在 nrwl nx 工作区中设置了一个包含多个 Nodejs 和 Angular 应用程序的项目 我正在尝试使用环境文件 在 Nodejs 应用程序内 我已经像这样设置了导入 import environment from envir
  • OLE DB 目标:转换规范的字符值无效

    我的表来源 num facture TYPE actif date 1 1 1 2010 01 31 00 00 00 000 2 2 1 2011 01 31 00 00 00 000 3 3 2 2012 01 31 00 00 00
  • 获取当前年份和月份会产生奇怪的结果

    我正在做一个与Android相关的学习项目 我试图使用下面的代码获取当前年份和月份 但它对我不起作用 GregorianCalendar gc new GregorianCalendar gc YEAR returning 1 gc MON
  • 在 WebSocketContext 中正确处置 WebSocket

    在 ASP NET 中 当您提供的处理程序HttpContext AcceptWebSocketRequest http msdn microsoft com en us library system web httpcontext acc
  • 将除一个目录之外的整个站点重定向到新站点 - apache .htaccess

    我正在尝试将当前站点移至新域 一个目录除外 Example 当前站点 oldsite olddomain example 新站点 新域名 example 所以我知道我可以创建一个 htaccess 重定向条目来执行此操作 并且它有效 但我想
  • 为什么要避免在 java 中使用 Runtime.exec() ?

    Process p Runtime getRuntime exec command is p getInputStream byte userbytes new byte 1024 is read userbytes 我想从 java 在
  • Teradata 优化器 SQL 中的 Equal 与 Like

    我目前正在尝试优化一些 bobj 报告 其中我们的后端是 Teradata 这Teradata优化器看起来很挑剔 我想知道是否有人想出了一个解决方案或解决方法让优化器以类似的方式对待喜欢的人 My issue is that we allo
  • VMWare vFabric tc Server 和 maven 找不到 org.springframework.web.servlet.DispatcherServlet

    我知道以前发布过一个与此非常相似的问题 但该解决方案不适用于我的问题 我正在尝试使用 Maven 启动一个基本的 Spring 项目 这是我的 pom xml
  • Pandas to_sql 不适用于 SQL Alchemy 连接

    我使用以下代码通过 SQL alchemy 连接到 MySQL 数据库 from sqlalchemy import create engine import pandas as pd query SELECT FROM hello eng
  • Java Swing - 本地化温度

    有没有办法在Java中本地化温度 就像温度格式将基于区域设置 例如 对于挪威语 温度格式应为 14 C 度数符号之前应该有一个空格 但其他语言应该是14 C 以下示例演示了温度本地化 包括按区域设置特定属性对十进制值进行可自定义的舍入和格式
  • 覆盖 PHPDoc 中的返回类型

    我有课Abcwith 方法 正文并不重要 return SomeBaseClass function getAll 在幼儿班Abc called AbcChild我想重新定义仅返回类的类型 以便在 Netbeans 中正确查看它 我可以在不
  • JavaFX 3D 透视相机运动

    现在 感谢我的帮助先前的问题 https stackoverflow com questions 69249037 most simple rotate camera via mouse not working 以及来自用户 trashgo
  • mix.scripts 不起作用(webpack.mix.js)

    我有以下 webpack mix js const mix require laravel mix mix scripts resources assets js app js resources assets js definers js
  • 拉直弯曲轮廓

    给定一个具有易于识别边缘的轮廓 如何拉直它及其内容 如图所示 检测黑色边缘并为其拟合样条曲线 从该样条线上 您将能够绘制法线 并沿着它定期标记点 这形成了易于拉直的 u v 网格 要计算目标图像 请绘制水平行 这些行对应于源中的特定法线 然
  • 进入智能指针,如何处理代表所有权?

    我制作了一个动态图结构 其中节点和弧都是类 我的意思是弧是内存中的实际实例 它们并不是由节点到节点的邻接列表暗示的 每个节点都有一个指向它所连接的弧的指针列表 每个弧都有 2 个指针 指向它所连接的 2 个节点 删除节点会调用其每条弧的de
  • 绑定到127.0.0.2

    我在 Windows XP PC 上本地运行客户端 服务器应用程序 出于测试目的 我想运行多个客户端 服务器有一个配置文件 其中包含可以连接的客户端的IP地址 在现实世界中 这些都将位于具有不同 IP 地址的不同主机上 目前我可以使用绑定到
  • 如何使用自定义适配器对 listView 进行排序

    我正在制作一个应用程序 其中显示状态为在线和离线的人数 目前ListView是根据api设置的 我想根据人员的在线状态对 listView 进行排序 例如 如果没有 的人在线 然后列表视图首先显示他们 我在我的项目中实现了延迟加载图像 这是