jeudi 15 mai 2014

How can i make this Custom Adapter work?


Vote count:

0




so i am an intern and my supervisor wrote this custom adapter which i am supposed to work with, I get everything in my app to work except when i want to search a listview using Filter...When i run my code, it gives me a null pointer exception at performfiltering when i try to search the edit textbox.I know it's because the method is not seeing the items in my listview but i don't know how to fix it.my custom adapter is below can anyone help me fix it ASAP pls. thank you.



public class ListBaseAdapter extends BaseAdapter implements Filterable {



private final ArrayList<Object> DATA = new ArrayList<Object>();

private final ArrayList<Object> items = new ArrayList<Object>();

private final Vector<Integer> TYPE = new Vector<Integer>();
private ListBaseAdapterListener listener = null;
private LayoutListener layoutListener = null;


public ListBaseAdapter() {

}

public ListBaseAdapter(ListBaseAdapterListener value) {
setListener(value);
}

public void setListener(ListBaseAdapterListener value) {
listener = value;
}

public void setLayoutListener(LayoutListener value) {
layoutListener = value;
}

@Override
public int getCount() {
return DATA.size();
}

@Override
public int getViewTypeCount() {
int max = 0;
for (int i = 0; i < TYPE.size(); i++) {
if (TYPE.elementAt(i) > max) {
max = TYPE.elementAt(i);
}
}
return max + 1;
}

@Override
public Object getItem(int position) {
return DATA.get(position);
}

@Override
public int getItemViewType(int value) {
return TYPE.elementAt(value);
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (listener != null) {
return listener.onListGetView(position, convertView, parent);
}
return null;
}

public void addItem(Object item, int type) {
DATA.add(item);
TYPE.addElement(type);
notifyDataSetChanged();
}

public void setItem(int position, Object item) {
DATA.set(position, item);
notifyDataSetChanged();
}

public void setItem(int position, Object item, int type) {
DATA.set(position, item);
TYPE.set(position, type);
notifyDataSetChanged();
}

public void setItemType(int position, int type) {
TYPE.set(position, type);
notifyDataSetChanged();
}

public void removeItem(int position) {
DATA.remove(position);
TYPE.remove(position);
notifyDataSetChanged();
}

public void removeAll() {
DATA.clear();
TYPE.clear();
notifyDataSetChanged();
}

public void onAction(int action, Object parameter) {
layoutListener.onAction(action, parameter);
}

@Override
public Filter getFilter() {

Filter filter = new Filter() {

@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {

List<String> arrayListNames = (List<String>) results.values;
notifyDataSetChanged();
}

@Override
protected FilterResults performFiltering(CharSequence constraint) {

FilterResults results = new FilterResults();
ArrayList<String> FilteredArrayNames = new ArrayList<String>();

// perform your search here using the searchConstraint String.

constraint = constraint.toString().toLowerCase();
for (int i = 0; i < items.size(); i++) {
String dataNames = (String) items.get(i);
if (( dataNames).toLowerCase().startsWith(constraint.toString())) {
FilteredArrayNames.add( dataNames);
}
}

results.count = FilteredArrayNames.size();
results.values = FilteredArrayNames;
Log.e("VALUES", results.values.toString());

return results;
}

private Object getResources() {
// TODO Auto-generated method stub
return null;
}
};

return filter;
}


}


this is how i use my addapter to add to a listview.



String[] testArray = getResources().getStringArray(R.array.allArrays);
ListView lv = (ListView) findViewById(R.id.listViewMenuRight);
final ListBaseAdapter adapter1 = new ListBaseAdapter();

adapter1.addItem(new MenuItem(string.accomodation, 0), 0);
lv.setAdapter(adapter1);
EditText inputSearch = (EditText) findViewById(R.id.editTextSearch);
inputSearch.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
// When user changed the Text
((Filterable) adapter1).getFilter().filter(cs);
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub

}

@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
adapter1.setListener(new ListBaseAdapterListener() {
@Override
public View onListGetView(int position, View view1, ViewGroup parent) {

@SuppressWarnings("unused")
int type = adapter1.getItemViewType(position);

if (view1 == null) {
view1 = inflater.inflate(layout.row_menu_item, null);
view1.setTag(new MenuHolder(view1));
}

MenuItem item = (MenuItem) adapter1.getItem(position);

((MenuHolder) view1.getTag()).setData(item.TEXT, item.IMAGE);

view1.setBackgroundResource(drawable.list_selector_menu);

return view1;
}
});


asked 1 min ago






Aucun commentaire:

Enregistrer un commentaire