0

我正在使用来自 commonsguy 的 EndlessAdapter 和 SimpleAdapter。当我向下滚动时我可以加载数据而没有问题,但是当我向上滚动时我有一个 NullPointerException。问题出在方法上

    @Override
 public View getView(int position, View convertView,ViewGroup parent) {
  return wrapped.getView(position, convertView, parent);
 }

从类AdapterWrapper

调用wrapped.getView(position, convertView,parent)引发异常,我不知道为什么。

这是我的实现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();
      }
     }

我这样使用它:

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

有谁知道可能是什么问题?

4

1 回答 1

1

它位于 SimpleAdapter 内部。

我会首先摆脱 ,EndlessAdapter然后将您的清单放在SimpleAdapter.

如果这可行,那么它所包装的适配器的工作方式可能存在错误EndlessAdapter——在这种情况下,我需要一个示例项目来演示该错误。

如果SimpleAdapter没有. EndlessAdapter_SimpleAdapter

于 2010-03-26T12:49:32.047 回答