Отфильтрованный список не обновлен - PullRequest
0 голосов
/ 15 июня 2010

Возникла проблема с обновлением списка отфильтрованных.

В моем приложении есть пользовательский вид списка, который имеет два текстовых представления и одно изображение в качестве элементов строки.

Фильтр работает нормально, но мой пользовательский список не обновляется; результат показывает первые строки списка.

Это мой код.

abc.java file

public class abc extends ListActivity 
{

private ArrayList<String> m_orders = null;

private OrderAdapter m_adapter;

List<String> Title_List=new ArrayList<String>();

List<String> Author_List=new ArrayList<String>();

private ArrayAdapter<String> adapter = null;

private LayoutInflater mInflater;

private Vector data;

private EditText filterText = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
}

@Override

public void onStart() {
super.onStart();


m_orders = new ArrayList<String>();


filterText = (EditText) findViewById(R.id.search_box);


filterText.addTextChangedListener(filterTextWatcher);


setListAdapter(m_adapter=new OrderAdapter(this,R.layout.list_row, m_orders));


m_adapter.notifyDataSetChanged();


getListView().setTextFilterEnabled(true);


}

private TextWatcher filterTextWatcher = new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence s, int start, int count,
                int after) 

{


        }
        @Override
public void onTextChanged(CharSequence s, int start, int before,
                int count) {


           m_adapter.getFilter().filter(s, new Filter.FilterListener() {
                                       public void onFilterComplete(int count) {
                                  Log.d(null, "filter complete! count: "+ count);
                                           m_adapter.notifyDataSetChanged();

                                       }
                                   }); 
      }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }

    };


private class OrderAdapter extends ArrayAdapter {

            private ArrayList<String> items;

     public OrderAdapter(Context context, int textViewResourceId, ArrayList<String> items) {
                    super(context, textViewResourceId, items);
                    this.items = items;
            }
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                    View v = convertView;
                    if (v == null) {
     LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        v = vi.inflate(R.layout.list_row, null);
                    }
                    String order = m_orders.get(position);
                    String description = Item_List.get(position);
                    if (order != null)
                    {

                        TextView tt = (TextView) v.findViewById(R.id.toptext);
                        TextView bt = (TextView) v.findViewById(R.id.bottomtext);
                            if (tt != null) {
                                  tt.setText("Title: "+order);    

                              }
                            if (bt != null) {
                             bt.setText("des: "+description);    
                                                              }
                    }
                    return v;
            }
    }

      @Override
public void onListItemClick(ListView parent, final View v, int pos, long id) 
{

}

}

list_row.xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:padding="6dip">
    <ImageView
        android:id="@+id/icon"
        android:layout_width="40px"
        android:layout_height="40px"
        android:layout_marginRight="6dip"
       />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="50px">
        <TextView
            android:paddingTop="1pt"
            android:id="@+id/toptext"
            android:layout_width="200px"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:textColor="#ffffff"
            android:textSize="18sp"
            android:paddingBottom="1pt"
            android:ellipsize="marquee" 

            android:marqueeRepeatLimit="marquee_forever" 
            android:lines="1" 
            android:scrollHorizontally="true"
        />
        <TextView
            android:paddingTop="1pt"
            android:layout_width="200px"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:id="@+id/bottomtext"
            android:paddingBottom="2pt"
            android:ellipsize="marquee" 

            android:marqueeRepeatLimit="marquee_forever" 
            android:lines="1" 
            android:scrollHorizontally="true"
        />
    </LinearLayout>
</LinearLayout>

Я думаю, что фильтр работает, но только результат не обновляется в виде списка.

1 Ответ

0 голосов
/ 20 мая 2011

Я думаю, у меня была такая же проблема.Мне потребовалось около 5 часов, чтобы выяснить это.Возможно, ошибка в вашем getView ().

Используйте метод getItem () метода ArrayAdapter вместо

String order = m_orders.get(position);
String description = Item_List.get(position);

Проблема в том, что отфильтрованные данные содержатся в ArrayAdapter.mObjects.Если вы используете свою собственную переменную данных, то ничего не фильтруется.

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