如何在android中重新显示列表视图
在我的listActivity中,我使用如何在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
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。黄:感谢您的努力:),请看我的编辑,这很好。