J'utilise EndlessAdapter de commonsguy avec un SimpleAdapter. Je peux charger des données quand je fais défiler vers le bas sans problèmes, mais j'ai une exception NullPointerException quand je fais défiler vers le haut. Le problème est dans la méthodeNullPointerException utilisant EndlessAdapter avec SimpleAdapter
@Override
public View getView(int position, View convertView,ViewGroup parent) {
return wrapped.getView(position, convertView, parent);
}
de la classe AdapterWrapper
.
L'appel à wrapped.getView(position, convertView,parent)
déclenche l'exception et je ne sais pas pourquoi.
Ceci est ma mise en œuvre de EndlessAdapter
:
//Inner class in SearchTextActivity
class DemoAdapter extends EndlessAdapter {
private RotateAnimation rotate = null;
DemoAdapter(ArrayList<HashMap<String, String>> result) {
super(new SimpleAdapter(SearchTracksActivity.this,
result,
R.layout.textlist_item,
PROJECTION_COLUMNS,
VIEW_MAPPINGS));
rotate = new RotateAnimation(0f,
360f,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
rotate.setDuration(600);
rotate.setRepeatMode(Animation.RESTART);
rotate.setRepeatCount(Animation.INFINITE);
}
@Override
protected View getPendingView(ViewGroup parent) {
View row=getLayoutInflater().inflate(R.layout.textlist_item, null);
View child=row.findViewById(R.id.title);
child.setVisibility(View.GONE);
child=row.findViewById(R.id.username);
child.setVisibility(View.GONE);
child=row.findViewById(R.id.throbber);
child.setVisibility(View.VISIBLE);
child.startAnimation(rotate);
return row;
}
@Override
@SuppressWarnings("unchecked")
protected void rebindPendingView(int position, View row) {
HashMap<String, String> res = (HashMap<String, String>)getWrappedAdapter().getItem(position);
View child=row.findViewById(R.id.title);
((TextView)child).setText(res.get("title"));
child.setVisibility(View.VISIBLE);
child=row.findViewById(R.id.username);
((TextView)child).setText(res.get("username"));
child.setVisibility(View.VISIBLE);
ImageView throbber=(ImageView)row.findViewById(R.id.throbber);
throbber.setVisibility(View.GONE);
throbber.clearAnimation();
}
boolean mFinal = true;
@Override
protected boolean cacheInBackground() {
EditText searchText = (EditText)findViewById(R.id.searchText);
String textToSearch = searchText.getText().toString();
Util.getSc().searchText(textToSearch , offset, limit, new ResultListener<ArrayList<Text>>() {
@Override
public void onError(Exception e) {
e.toString();
mFinal = false;
}
@Override
public void onSuccess(ArrayList<Text> result) {
if(result.size() == 0){
mFinal = false;
}else{
texts.addAll(result);
offset++;
}
}
});
return mFinal;
}
@Override
protected void appendCachedData() {
for(Text text : texts){
result.add(text.getMapValues());
}
texts.clear();
}
}
Et je l'utilise de cette façon:
public class SearchTextActivity extends AbstractListActivity {
private static final String[] PROJECTION_COLUMNS = new String[] {
TextStore.Text.TITLE,
TextStore.Text.USER_NAME};
private static final int[] VIEW_MAPPINGS = new int[] {
R.id.Text_title,
R.id.Text_username};
ArrayList<HashMap<String, String>> result;
static ArrayList<Text> texts;
static int offset = 0;
static int limit = 1;
@Override
void onAbstractCreate(Bundle savedInstance) {
setContentView(R.layout.search_tracks);
setupViews();
}
private void setupViews() {
ImageButton searchButton = (ImageButton)findViewById(R.id.searchButton);
updateView();
}
SimpleAdapter adapter;
void updateView(){
if(result == null) {
result = new ArrayList<HashMap<String, String>>();
}
if(tracks == null) {
texts = new ArrayList<Text>();
}
}
public void sendQuery(View v){
offset = 0;
texts.clear();
result.clear();
setListAdapter(new DemoAdapter(result));
}
}
Est-ce que quelqu'un sait ce qui pourrait être le problème?
Je n'ai pas essayé SimpleAdapter avec EndlessAdapter. Si 'NullPointerException' est directement sur la ligne' wrapped.getView (position, convertView, parent) ', alors' wrapped' doit être 'null'. – CommonsWare
Merci pour votre réponse, mais j'ai vérifié que 'enveloppé' n'est pas nul. L'erreur provient de wrapped.getView (position, convertView, parent). C'est dans le SimpleAdapter. Peut-être est-ce un problème lié à l'index 'position', mais il y a une vue sur cette position. Je ne sais pas ce qui se passe là-bas. – ahmontero