列表项甚至列表的错误位置按字母顺序排序

时间:2017-11-10 15:40:17

标签: android sorting listview

我有一个来自AWS的列表,列表按照数据库显示,点击监听器也正常工作。 (如果我点击New-York,它将显示纽约的详细信息)但是在用比较器排序之后,列表将按字母顺序排列..但是当我点击第一项时它会显示其他一些城市细节。

第一个活动代码

 List<SettlementsTable> lstSettlements = new ArrayList<>();
            lstSettlements.addAll((List<SettlementsTable>) result);
            for (final SettlementsTable table : lstSettlements)

                lstStrings.add(table.getAreaName());

                adapter = new SettlementListAdapter(lstStrings, getApplicationContext());


                listView.setAdapter(adapter);
            adapter.sort(new Comparator<String>() {
                @Override
                public int compare(String s, String t1) {
                    return s.compareTo(t1);
                }
            });
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                    SettlementsTable settlementsTable = lstSettlements.get(i);
                    Intent intent = new Intent(SettlementsActivity.this, SettlementListResultActivity.class);
                    intent.putExtra("KEY", (Serializable) settlementsTable);
                    startActivity(intent);
                } 

第二个活动代码

 settlementsTable = (SettlementsTable) getIntent().getSerializableExtra("KEY");

    toolbar.setTitle(settlementsTable.getAreaName());
    population = (TextView) findViewById(R.id.textview1);
    establishYear=  (TextView) findViewById(R.id.textView3);

     population.setText(settlementsTable.getPopulation_2015());

1 个答案:

答案 0 :(得分:0)

  

当我点击第一项时,它会显示其他一些城市细节。

因为Comparator用于Adapter实例而不是lstSettlementsonItemClick根据排序的数据源lstStrings返回位置。

获取正确的AreaName名称:

     String strAreaName=(String)adapterView.getItemAtPosition(i); 

并在SettlementsTable中获取onItemClick对象,将其传递给Adapter,然后在Adapter上应用排序并获取项目:

     SettlementsTable selectedObj=(SettlementsTable)
                                      adapterView.getItemAtPosition(i);