Эй парни мое первое сообщение здесь... Я пытаюсь записать пользовательский фильтр для фильтрации arraylist в моем arrayadapter, таким образом, что мой listview фильтрован, когда я нажимаю на кнопку.
Например, когда я нажимаю на свою кнопку
public void onClick(View arg0) {
String abc = "abc";
m_adapter.getFilter().filter(abc);
}
Однако, когда я нажимаю на свою кнопку, мое приложение, оконечное неожиданно. Вот мой код для arrayadapter и фильтра.Пожалуйста, помогите мне.
package com.ntu.rosemobile.searchlist;
public class ResultsAdapter extends ArrayAdapter<SearchItem> implements Filterable{
public ArrayList<SearchItem> subItems;
public ArrayList<SearchItem> allItems;
private LayoutInflater inflater;
private PTypeFilter filter;
public ResultsAdapter(Context context, int textViewResourceId, ArrayList<SearchItem> items) {
super(context, textViewResourceId, items);
this.subItems = items;
this.allItems = this.subItems;
inflater= LayoutInflater.from(context);
}
@Override
public Filter getFilter() {
if (filter == null){
filter = new PTypeFilter();
}
return filter;
}
//@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
v = inflater.inflate(R.layout.listrow, null);
}
SearchItem o = subItems.get(position);
if (o != null) {
TextView pname = (TextView) v.findViewById(R.id.productname);
TextView neg = (TextView) v.findViewById(R.id.negNum);
TextView pos = (TextView) v.findViewById(R.id.posNum);
TextView neu = (TextView) v.findViewById(R.id.neuNum);
WebImageView productPhoto = (WebImageView)v.findViewById(R.id.pPhoto);
if(productPhoto!=null){
productPhoto.setImageUrl(o.getImageUrl().toString());
productPhoto.loadImage();
}
if(pname!= null){
pname.setText(o.getProductName().toString());
}
if (neg != null) {
String a = "" + o.getNegativeReviews();
neg.setText(a);
}
if(neu != null){
String a = "" + o.getNeutralReviews();
neu.setText(a);
}
if(pos != null){
String a = "" + o.getPositiveReviews();
pos.setText(a);
}
}
return v;
}
private class PTypeFilter extends Filter{
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence prefix,
FilterResults results) {
// NOTE: this function is *always* called from the UI thread.
subItems = (ArrayList<SearchItem>)results.values;
notifyDataSetChanged();
}
@SuppressWarnings("unchecked")
protected FilterResults performFiltering(CharSequence prefix) {
// NOTE: this function is *always* called from a background thread, and
// not the UI thread.
FilterResults results = new FilterResults();
ArrayList<SearchItem> i = new ArrayList<SearchItem>();
if (prefix!= null && prefix.toString().length() > 0) {
for (int index = 0; index < allItems.size(); index++) {
SearchItem si = allItems.get(index);
if(si.getPType().compareTo(prefix.toString()) == 0){
i.add(si);
}
}
results.values = i;
results.count = i.size();
}
else{
synchronized (allItems){
results.values = allItems;
results.count = allItems.size();
}
}
return results;
}
}
}
Можно попробовать что-то вроде:
a = [1 2 3 4 5]'
l = size(a)
for i=2:5
a(1:5, i) = a(1:5)
Цикл просто продолжает добавлять столбцы к концу.
-121--4605281-Несколько интерфейсов с одинаковыми именами членов не являются проблемой. Если члены могут использовать одну и ту же реализацию, просто создайте открытый член с тем же именем; если они не могут использовать одну и ту же реализацию, можно просто явно реализовать один (или все) из членов.
Например, IEnumerable < T >
наследует IEnumerable
, и оба предоставляют метод GetEnumerator ()
с различными типами возвращаемых значений. Следовательно, IEnumerable.GetEnumerator ()
обычно реализуется явным образом:
class Foo : IEnumerable<object>{
// explicitly implement IEnumerable.GetEnumerator()
IEnumerator IEnumerable.GetEnumerator ()
{
return GetEnumerator();
}
public IEnumerator<object> GetEnumerator ()
{
yield break;
}
}
Вызов GetEnumerator ()
в IEnumerable.GetEnumerator ()
не является бесконечным он вызывает открытый член с тем же именем, а не сам (т.е. метод IEnumerable.GetEnumerator ()
).
Необходимо переопределить метод getCount () в классе ArrayAdapter.