Как обновить представление списка в Android - PullRequest
0 голосов
/ 11 ноября 2011

В моем списке активности я использую

setListAdapter(new ArrayAdapter<String>(this, R.layout.project_list, titles)); 

чтобы установить мой список. Теперь я хочу отсортировать этот список по щелчку спиннера, для этого я использую как это

spn_sort_order .setOnItemSelectedListener(new OnItemSelectedListener() {

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

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

и для отображения новых результатов мне нужно обновить старый вид.

Edit:

 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();
                    }

                }

когда я нажимаю на первый элемент в списке, мои данные сортируются в порядке возрастания, а когда я нажимаю на второй элемент в списке, данные сортируются в порядке убывания bcoz, который я использовал

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

Ответы [ 3 ]

1 голос
/ 11 ноября 2011

Кажется, вы используете ArrayAdapter, поэтому я бы рекомендовал использовать arrayAdapter.notifyDataSetChanged()

0 голосов
/ 11 ноября 2011

Когда я проверил ваш код, я обнаружил, что он работает.

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);
    }

}

Здесь я обнаружил странную вещь. При повторном нажатии на элемент содержимое не будет изменено на: A, B, C, D. Кажется, что массив полностью изменен только один раз. Любая идея? Я не профессиональный программист.

0 голосов
/ 11 ноября 2011

попробуйте listView.invalidate ()..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...