如何在android中重新显示列表视图

如何在android中重新显示列表视图,android,android-listview,Android,Android Listview,在我的listActivity中,我使用 setListAdapter(new ArrayAdapter<String>(this, R.layout.project_list, titles)); setListAdapter(新的ArrayAdapter(这个,R.layout.project_列表,标题)); 设置我的列表视图。现在,我想在单击微调器时对这个列表进行排序,就像它一样 spn_sort_order .setOnItemSelectedListener(new

在我的listActivity中,我使用

setListAdapter(new ArrayAdapter<String>(this, R.layout.project_list, titles)); 
setListAdapter(新的ArrayAdapter(这个,R.layout.project_列表,标题));
设置我的列表视图。现在,我想在单击微调器时对这个列表进行排序,就像它一样

spn_sort_order .setOnItemSelectedListener(new OnItemSelectedListener() {

   public void onNothingSelected(AdapterView<?> arg0) { }

   public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
spn\u排序顺序。setOnItemSelectedListener(新的OnItemSelectedListener(){
未选择的公共无效(AdapterView arg0){}
已选择公共位置(AdapterView父视图、视图v、整型位置、长id){
要显示新结果,我需要刷新旧视图

编辑:

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

                    sortBy = position;
                    System.out.println("selected item id:::priortiy::::"
                            + sortBy);
                    if (sortBy == 1) {
                        Collections.sort(titles);
                        System.out.println(titles);
                        setListAdapter(listAdapter);
                        listAdapter.notifyDataSetChanged();
                    }
                    if (sortBy == 2) {
                        Comparator<Object> comparator = Collections.reverseOrder();
                        Collections.sort(titles,comparator);
                        System.out.println(titles);
                        setListAdapter(listAdapter);
                        listAdapter.notifyDataSetChanged();
                    }

                }
public void已选中(AdapterView父视图、视图v、,
内部位置,长id){
sortBy=位置;
System.out.println(“所选项目id:::优先级::”
+肮脏的);
如果(排序=1){
收藏。分类(标题);
系统输出打印项次(标题);
setListAdapter(listAdapter);
listAdapter.notifyDataSetChanged();
}
如果(排序==2){
Comparator Comparator=Collections.reverseOrder();
集合。排序(标题、比较符);
系统输出打印项次(标题);
setListAdapter(listAdapter);
listAdapter.notifyDataSetChanged();
}
}
当我单击列表中的第一项时,我的数据按升序排序,当我单击列表中的第二项时,数据按降序排序

Comparator<Object> comparator = Collections.reverseOrder();
Comparator-Comparator=Collections.reverseOrder();

您似乎在使用
ArrayAdapter
,因此我建议您使用
ArrayAdapter.notifyDataSetChanged()
试试listView.invalidate();

当我测试您的代码时,我发现它可以工作

package viewTest.example;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class ViewTestActivity extends Activity {
    private ArrayAdapter<String> adapter0;
    private String[] array0;
    private ListView lv0;       
    private ArrayList<String> array;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//Content on LV0.xml: A, B, C,D
        array0 = getResources().getStringArray(R.array.LV0);
        array=new ArrayList<String>();
        for(int i=0;i<array0.length;i++)
            array.add(array0[i]);


        adapter0 = new ArrayAdapter<String>(this, R.layout.item, array);    
        lv0 = new ListView(this);

        lv0.setAdapter(adapter0);


//When clicking any item of the listview, the listview will referesh the content to: D,C,B,A
        lv0.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {


                Comparator<Object> comparator = Collections.reverseOrder();
                Collections.sort(array,comparator);
//              lv0.invalidate(); //This call won't refresh the content.
                adapter0.notifyDataSetChanged();


            }
        });
        setContentView(lv0);
    }

}
package viewTest.example;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入android.app.Activity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.AdapterView.OnItemClickListener;
公共类ViewTestActivity扩展了活动{
专用阵列适配器0;
私有字符串[]数组0;
私有ListView lv0;
私有数组列表数组;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//LV0.xml上的内容:A、B、C、D
array0=getResources().getStringArray(R.array.LV0);
数组=新的ArrayList();

对于(int i=0;我可以请你给我一些详细信息吗?这难道不只是重新绘制微调器而不知道数据已经更改吗?@Shailendra Rajawat-你知道listView.invalidate()的正确用法吗?在何处使用它?是的。当您知道列表数据中有一些更改并希望在屏幕上反映时,请使用它。这将通过为每个孩子调用getView()来重新创建列表。那么listView.invalidate()和Adapter.notifyDataSetChanged()之间的区别是什么?@Romi:不……它会自动更改!ArrayAdapter用于将数据集绑定到listView,因此如果要对listView进行排序,必须对适配器中的数据进行排序,然后调用
notifyDataSetChanged()
要请求系统根据您的新数据集刷新listView,或者您可以通过setListAdapter()设置一个新的ArrayAdapter。黄:感谢您的努力:),请看我的编辑,这很好。