排序JSONArray后,自定义列表视图没有改变? [英] After sorting JSONArray,Custom list view not changed?

查看:160
本文介绍了排序JSONArray后,自定义列表视图没有改变?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我排序JSONArray并显示在自定义列表视图中,但排序后数据在自定义列表视图中没有更改。

I am sorting JSONArray and show them in a custom list view, but after sorting the data does not changed in custom list view.

这里是我的代码fab按钮选择要执行的排序:

Here is my code for fab button to select which sort is to be perform:

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        AlertDialog.Builder builder=new AlertDialog.Builder(SearchResult.this);
        builder.setTitle("Sort List Item");
        builder.setItems(new CharSequence[]{"By Name", "By Father Name","By EPIC","By House Number"}, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

                switch (i)
                {
                    case 0:
                        Toast.makeText(getApplicationContext(), "By Name", Toast.LENGTH_SHORT).show();

                        sortJsonTechnique="1";
                        if (myData)
                        {
                            sortByName(sortdata,sortJsonTechnique);
                        }
                        break;
                    case 1:

                        Toast.makeText(getApplicationContext(), "By Father Name", Toast.LENGTH_SHORT).show();
                        sortJsonTechnique="2";
                        if (myData)
                        {
                            sortByName(sortdata,sortJsonTechnique);
                        }

                        break;
                    case 2:

                        Toast.makeText(getApplicationContext(), "By EPIC", Toast.LENGTH_SHORT).show();
                        sortJsonTechnique="3";
                        if (myData)
                        {
                            sortByName(sortdata,sortJsonTechnique);
                        }

                        break;
                    case 3:

                        Toast.makeText(getApplicationContext(), "By House Number", Toast.LENGTH_SHORT).show();
                        sortJsonTechnique="4";
                        if (myData)
                        {
                            sortByName(sortdata,sortJsonTechnique);
                        }

                        break;
                    default:
                        break;
                }

            }
        });
        builder.show();


    }
});

在fab按钮选择之后,点击i sort json数组。
这里是parse json数组的代码:

And after selection made in fab button click i sort json array. Here is code for parse json array:

 private void sortByName(String mysortJson,String sortType)
    {

        List<JSONObject> jsonObjects=new ArrayList<JSONObject>();

        try {

            JSONObject object=new JSONObject(mysortJson);
            JSONArray jsonArray=object.getJSONArray("Data");
            for (int i=0;i<jsonArray.length();i++)
            {
                jsonObjects.add(jsonArray.getJSONObject(i));
            }

            if (sortType.equals("1"))
            {
                Collections.sort(jsonObjects, new Comparator<JSONObject>() {
                    @Override
                    public int compare(JSONObject a, JSONObject b) {
                        String val1=new String();
                        String val2=new String();

                        try {

                            val1=(String) a.get("Name");
//                        Log.e("Value1",""+val1);
                            val2=(String) b.get("Name");
//                        Log.e("Value2",""+val2);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        return val1.compareTo(val2);
                    }
                });

                for (int j=0;j<jsonObjects.size();j++)
                {
                    jsonArray.put(jsonObjects.get(j));
                }
                voter_id=new String[jsonArray.length()];
                boothname_id=new String[jsonArray.length()];
                voter_name=new String[jsonArray.length()];
                voter_f_m_h_name=new String[jsonArray.length()];
                voter_epic=new String[jsonArray.length()];
                voter_h_no=new String[jsonArray.length()];
                voter_mobile=new String[jsonArray.length()];
                voter_gender=new String[jsonArray.length()];
                voter_age=new String[jsonArray.length()];
                get_voter_dob=new String[jsonArray.length()];
                get_marriage_anniv=new String[jsonArray.length()];
                get_voter_caste_id=new String[jsonArray.length()];
                get_voter_status_id=new String[jsonArray.length()];
                get_voter_social_status_id=new String[jsonArray.length()];

                for (int c=0;c<jsonArray.length();c++)
                {
                    JSONObject fetchVoter = jsonArray.getJSONObject(c);
                    voter_id[c] = fetchVoter.getString(KEY_VOTER_ID);
                    boothname_id[c] = fetchVoter.getString(KEY_BOOTHNAME_ID);
                    voter_name[c] = fetchVoter.getString(KEY_SEARCH_NAME);
                    voter_f_m_h_name[c] = fetchVoter.getString(KEY_SEARCH_F_H_M_NAME);
                    voter_epic[c] = fetchVoter.getString(KEY_SEARCH_EPIC_NAME);
                    voter_h_no[c] = fetchVoter.getString(KEY_SEARCH_HOUSE_NUMBER);
                    voter_mobile[c]=fetchVoter.getString(KEY_SEARCH_MOBILE);
                    voter_gender[c]=fetchVoter.getString(KEY_SEARCH_GENDER);
                    voter_age[c]=fetchVoter.getString(KEY_SEARCH_AGE);
                    get_voter_dob[c]=fetchVoter.getString(KEY_SEARCH_DOB);
                    get_marriage_anniv[c]=fetchVoter.getString(KEY_MARRIEGE_ANNIV);
                    get_voter_caste_id[c]=fetchVoter.getString(KEY_GET_CASTE_ID);
                    get_voter_status_id[c]=fetchVoter.getString(KEY_GET_STATUS_ID);
                    get_voter_social_status_id[c]=fetchVoter.getString(KEY_GET_SOCIAL_STATUS);



                }
                CustomSearchList adapter=new CustomSearchList(this,ParseJsonData.voter_id,ParseJsonData.boothname_id,ParseJsonData.voter_name,ParseJsonData.voter_f_m_h_name,ParseJsonData.voter_epic,ParseJsonData.voter_h_no,ParseJsonData.voter_mobile,ParseJsonData.voter_age,ParseJsonData.voter_gender,ParseJsonData.get_marriage_anniv,ParseJsonData.get_voter_dob,ParseJsonData.get_voter_caste_id,ParseJsonData.get_voter_status_id,ParseJsonData.get_voter_social_status_id);
                searchlist.setAdapter(adapter);
                adapter.notifyDataSetChanged();



            }
            else if (sortType.equals("2"))
            {
                Collections.sort(jsonObjects, new Comparator<JSONObject>() {
                    @Override
                    public int compare(JSONObject a, JSONObject b) {
                        String val1=new String();
                        String val2=new String();

                        try {

                            val1=(String) a.get("FName");
//                        Log.e("Value1",""+val1);
                            val2=(String) b.get("FName");
//                        Log.e("Value2",""+val2);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        return val1.compareTo(val2);
                    }
                });

                for (int j=0;j<jsonObjects.size();j++)
                {
                    jsonArray.put(jsonObjects.get(j));
                }
                voter_id=new String[jsonArray.length()];
                boothname_id=new String[jsonArray.length()];
                voter_name=new String[jsonArray.length()];
                voter_f_m_h_name=new String[jsonArray.length()];
                voter_epic=new String[jsonArray.length()];
                voter_h_no=new String[jsonArray.length()];
                voter_mobile=new String[jsonArray.length()];
                voter_gender=new String[jsonArray.length()];
                voter_age=new String[jsonArray.length()];
                get_voter_dob=new String[jsonArray.length()];
                get_marriage_anniv=new String[jsonArray.length()];
                get_voter_caste_id=new String[jsonArray.length()];
                get_voter_status_id=new String[jsonArray.length()];
                get_voter_social_status_id=new String[jsonArray.length()];

                for (int c=0;c<jsonArray.length();c++)
                {
                    JSONObject fetchVoter = jsonArray.getJSONObject(c);
                    voter_id[c] = fetchVoter.getString(KEY_VOTER_ID);
                    boothname_id[c] = fetchVoter.getString(KEY_BOOTHNAME_ID);
                    voter_name[c] = fetchVoter.getString(KEY_SEARCH_NAME);
                    voter_f_m_h_name[c] = fetchVoter.getString(KEY_SEARCH_F_H_M_NAME);
                    voter_epic[c] = fetchVoter.getString(KEY_SEARCH_EPIC_NAME);
                    voter_h_no[c] = fetchVoter.getString(KEY_SEARCH_HOUSE_NUMBER);
                    voter_mobile[c]=fetchVoter.getString(KEY_SEARCH_MOBILE);
                    voter_gender[c]=fetchVoter.getString(KEY_SEARCH_GENDER);
                    voter_age[c]=fetchVoter.getString(KEY_SEARCH_AGE);
                    get_voter_dob[c]=fetchVoter.getString(KEY_SEARCH_DOB);
                    get_marriage_anniv[c]=fetchVoter.getString(KEY_MARRIEGE_ANNIV);
                    get_voter_caste_id[c]=fetchVoter.getString(KEY_GET_CASTE_ID);
                    get_voter_status_id[c]=fetchVoter.getString(KEY_GET_STATUS_ID);
                    get_voter_social_status_id[c]=fetchVoter.getString(KEY_GET_SOCIAL_STATUS);



                }
                CustomSearchList adapter=new CustomSearchList(this,ParseJsonData.voter_id,ParseJsonData.boothname_id,ParseJsonData.voter_name,ParseJsonData.voter_f_m_h_name,ParseJsonData.voter_epic,ParseJsonData.voter_h_no,ParseJsonData.voter_mobile,ParseJsonData.voter_age,ParseJsonData.voter_gender,ParseJsonData.get_marriage_anniv,ParseJsonData.get_voter_dob,ParseJsonData.get_voter_caste_id,ParseJsonData.get_voter_status_id,ParseJsonData.get_voter_social_status_id);
                searchlist.setAdapter(adapter);
                adapter.notifyDataSetChanged();

            }
            else if (sortType.equals("3"))
            {
                Collections.sort(jsonObjects, new Comparator<JSONObject>() {
                    @Override
                    public int compare(JSONObject a, JSONObject b) {
                        String val1=new String();
                        String val2=new String();

                        try {

                            val1=(String) a.get("EPIC");
//                        Log.e("Value1",""+val1);
                            val2=(String) b.get("EPIC");
//                        Log.e("Value2",""+val2);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        return val1.compareTo(val2);
                    }
                });

                for (int j=0;j<jsonObjects.size();j++)
                {
                    jsonArray.put(jsonObjects.get(j));
                }
                voter_id=new String[jsonArray.length()];
                boothname_id=new String[jsonArray.length()];
                voter_name=new String[jsonArray.length()];
                voter_f_m_h_name=new String[jsonArray.length()];
                voter_epic=new String[jsonArray.length()];
                voter_h_no=new String[jsonArray.length()];
                voter_mobile=new String[jsonArray.length()];
                voter_gender=new String[jsonArray.length()];
                voter_age=new String[jsonArray.length()];
                get_voter_dob=new String[jsonArray.length()];
                get_marriage_anniv=new String[jsonArray.length()];
                get_voter_caste_id=new String[jsonArray.length()];
                get_voter_status_id=new String[jsonArray.length()];
                get_voter_social_status_id=new String[jsonArray.length()];

                for (int c=0;c<jsonArray.length();c++)
                {
                    JSONObject fetchVoter = jsonArray.getJSONObject(c);
                    voter_id[c] = fetchVoter.getString(KEY_VOTER_ID);
                    boothname_id[c] = fetchVoter.getString(KEY_BOOTHNAME_ID);
                    voter_name[c] = fetchVoter.getString(KEY_SEARCH_NAME);
                    voter_f_m_h_name[c] = fetchVoter.getString(KEY_SEARCH_F_H_M_NAME);
                    voter_epic[c] = fetchVoter.getString(KEY_SEARCH_EPIC_NAME);
                    voter_h_no[c] = fetchVoter.getString(KEY_SEARCH_HOUSE_NUMBER);
                    voter_mobile[c]=fetchVoter.getString(KEY_SEARCH_MOBILE);
                    voter_gender[c]=fetchVoter.getString(KEY_SEARCH_GENDER);
                    voter_age[c]=fetchVoter.getString(KEY_SEARCH_AGE);
                    get_voter_dob[c]=fetchVoter.getString(KEY_SEARCH_DOB);
                    get_marriage_anniv[c]=fetchVoter.getString(KEY_MARRIEGE_ANNIV);
                    get_voter_caste_id[c]=fetchVoter.getString(KEY_GET_CASTE_ID);
                    get_voter_status_id[c]=fetchVoter.getString(KEY_GET_STATUS_ID);
                    get_voter_social_status_id[c]=fetchVoter.getString(KEY_GET_SOCIAL_STATUS);



                }
                CustomSearchList adapter=new CustomSearchList(this,ParseJsonData.voter_id,ParseJsonData.boothname_id,ParseJsonData.voter_name,ParseJsonData.voter_f_m_h_name,ParseJsonData.voter_epic,ParseJsonData.voter_h_no,ParseJsonData.voter_mobile,ParseJsonData.voter_age,ParseJsonData.voter_gender,ParseJsonData.get_marriage_anniv,ParseJsonData.get_voter_dob,ParseJsonData.get_voter_caste_id,ParseJsonData.get_voter_status_id,ParseJsonData.get_voter_social_status_id);
                searchlist.setAdapter(adapter);
                adapter.notifyDataSetChanged();


            }
            else if (sortType.equals(4))
            {
                Collections.sort(jsonObjects, new Comparator<JSONObject>() {
                    @Override
                    public int compare(JSONObject a, JSONObject b) {
                        String val1=new String();
                        String val2=new String();

                        try {

                            val1=(String) a.get("HouseNo");
//                        Log.e("Value1",""+val1);
                            val2=(String) b.get("HouseNo");
//                        Log.e("Value2",""+val2);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        return val1.compareTo(val2);
                    }
                });

                for (int j=0;j<jsonObjects.size();j++)
                {
                    jsonArray.put(jsonObjects.get(j));
                }
                voter_id=new String[jsonArray.length()];
                boothname_id=new String[jsonArray.length()];
                voter_name=new String[jsonArray.length()];
                voter_f_m_h_name=new String[jsonArray.length()];
                voter_epic=new String[jsonArray.length()];
                voter_h_no=new String[jsonArray.length()];
                voter_mobile=new String[jsonArray.length()];
                voter_gender=new String[jsonArray.length()];
                voter_age=new String[jsonArray.length()];
                get_voter_dob=new String[jsonArray.length()];
                get_marriage_anniv=new String[jsonArray.length()];
                get_voter_caste_id=new String[jsonArray.length()];
                get_voter_status_id=new String[jsonArray.length()];
                get_voter_social_status_id=new String[jsonArray.length()];

                for (int c=0;c<jsonArray.length();c++)
                {
                    JSONObject fetchVoter = jsonArray.getJSONObject(c);
                    voter_id[c] = fetchVoter.getString(KEY_VOTER_ID);
                    boothname_id[c] = fetchVoter.getString(KEY_BOOTHNAME_ID);
                    voter_name[c] = fetchVoter.getString(KEY_SEARCH_NAME);
                    voter_f_m_h_name[c] = fetchVoter.getString(KEY_SEARCH_F_H_M_NAME);
                    voter_epic[c] = fetchVoter.getString(KEY_SEARCH_EPIC_NAME);
                    voter_h_no[c] = fetchVoter.getString(KEY_SEARCH_HOUSE_NUMBER);
                    voter_mobile[c]=fetchVoter.getString(KEY_SEARCH_MOBILE);
                    voter_gender[c]=fetchVoter.getString(KEY_SEARCH_GENDER);
                    voter_age[c]=fetchVoter.getString(KEY_SEARCH_AGE);
                    get_voter_dob[c]=fetchVoter.getString(KEY_SEARCH_DOB);
                    get_marriage_anniv[c]=fetchVoter.getString(KEY_MARRIEGE_ANNIV);
                    get_voter_caste_id[c]=fetchVoter.getString(KEY_GET_CASTE_ID);
                    get_voter_status_id[c]=fetchVoter.getString(KEY_GET_STATUS_ID);
                    get_voter_social_status_id[c]=fetchVoter.getString(KEY_GET_SOCIAL_STATUS);



                }
                CustomSearchList adapter=new CustomSearchList(this,ParseJsonData.voter_id,ParseJsonData.boothname_id,ParseJsonData.voter_name,ParseJsonData.voter_f_m_h_name,ParseJsonData.voter_epic,ParseJsonData.voter_h_no,ParseJsonData.voter_mobile,ParseJsonData.voter_age,ParseJsonData.voter_gender,ParseJsonData.get_marriage_anniv,ParseJsonData.get_voter_dob,ParseJsonData.get_voter_caste_id,ParseJsonData.get_voter_status_id,ParseJsonData.get_voter_social_status_id);
                searchlist.setAdapter(adapter);
                adapter.notifyDataSetChanged();


            }

//            Log.e("Length Array",""+jsonArray.length());
//            Log.e("Length List",""+jsonObjects.size());



        } catch (JSONException e) {
            e.printStackTrace();
        }
    }



我使用`adapter.notifyDataSetChanged但我的自定义列表不影响排序。
请建议我该做什么。

I use `adapter.notifyDataSetChanged(); but my custom list not affect the sort. Please suggest me what to do.

推荐答案

我已经排序arraylist名为ArrayList> addressaray;
使用

I have sort the arraylist named ArrayList> addressaray; add response data to arraylist using

JSONObject object = new JSONArray(s.toString());
JSONArray arr1 = new JSONArray(object.getString("data").toString()).getJSONArray(0);
for (int i = 0; i < arr1.length(); i++) {
 JSONObject jsonObject = arr1.getJSONObject(i);
 HashMap<String, String> data = new HashMap<String, String>();
 data.put("id", jsonObject.getString("id"));
 data.put("date_inspected_details", jsonObject.getString("date_inspected_details"));
 addressaray.add(data);
    }
    adapter = new PropertiesEvaluatedFragmentAdapter(getActivity(), addressaray, getActivity().getSupportFragmentManager());
  listView.setAdapter(adapter);
  adapter.notifyDataSetChanged();
}

 @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    String item = parent.getItemAtPosition(position).toString();
 if(addressaray.size() > 0){
                sortListView(item);
                adapter.notifyDataSetChanged();
            }else{
                Toast.makeText(getActivity(), "No Record found.", Toast.LENGTH_SHORT).show();
            }

}

  private void sortListView(String option) {
        switch (option) {
            case "Date":

Collections.sort(addressaray, new Comparator<HashMap<String, String>>() {
                    final static String COMPARE_KEY = "date_inspected_details";

                    @Override
                    public int compare(HashMap<String, String> lhs,
                                       HashMap<String, String> rhs) {
                        String Date1 = lhs.get(COMPARE_KEY);
                        String Date2 = rhs.get(COMPARE_KEY);
                        Log.e("Date1", Date1);
                        Log.e("Date2", Date2);
                        // Do your comparison logic here and retrn accordingly.
                        return Date1.compareTo(Date2);
                    }
                });
  break;
}
}JSONObject object = new JSONArray(s.toString());
JSONArray arr1 = new JSONArray(object.getString("data").toString()).getJSONArray(0);
for (int i = 0; i < arr1.length(); i++) {
 JSONObject jsonObject = arr1.getJSONObject(i);
 HashMap<String, String> data = new HashMap<String, String>();
 data.put("id", jsonObject.getString("id"));
 data.put("date_inspected_details", jsonObject.getString("date_inspected_details"));
 addressaray.add(data);
    }
    adapter = new PropertiesEvaluatedFragmentAdapter(getActivity(), addressaray, getActivity().getSupportFragmentManager());
  listView.setAdapter(adapter);
  adapter.notifyDataSetChanged();
}

 @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    String item = parent.getItemAtPosition(position).toString();
 if(addressaray.size() > 0){
                sortListView(item);
                adapter.notifyDataSetChanged();
            }else{
                Toast.makeText(getActivity(), "No Record found.", Toast.LENGTH_SHORT).show();
            }

}

  private void sortListView(String option) {
        switch (option) {
            case "Date":

Collections.sort(addressaray, new Comparator<HashMap<String, String>>() {
                    final static String COMPARE_KEY = "date_inspected_details";

                    @Override
                    public int compare(HashMap<String, String> lhs,
                                       HashMap<String, String> rhs) {
                        String Date1 = lhs.get(COMPARE_KEY);
                        String Date2 = rhs.get(COMPARE_KEY);
                        Log.e("Date1", Date1);
                        Log.e("Date2", Date2);
                        // Do your comparison logic here and retrn accordingly.
                        return Date1.compareTo(Date2);
                    }
                });
  break;
}
}

这篇关于排序JSONArray后,自定义列表视图没有改变?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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