ArrayAdapter> с классом EndlessAdapter - PullRequest
2 голосов
/ 21 декабря 2011

Как использовать ArrayAdapter-HashMap- с классом EndlessAdapter?

  class DemoAdapter extends EndlessAdapter {
        private RotateAnimation rotate=null;

        @SuppressWarnings("unchecked")
        ArrayAdapter<HashMap<String,String>> a=(ArrayAdapter<HashMap<String,String>>)getWrappedAdapter();

        DemoAdapter(ArrayList<HashMap<String, String>> items) {
        super(new ArrayAdapter<HashMap<String, String>>(Base.this,
                                          R.layout.row,
                                          android.R.id.text1, <------ ????
                                          items)); <------ ????

В моей строке два столбца R.layout.text1 и R.layout.text2.

Я видел несколько примеров с PROJECTION_COLUMNS и VIEW_MAPPINGS, но не знаю, как правильно его использовать.

Вот полный код, он работает, но я получаю что-то вроде {test2 = dasdasd, test1 = asdasd} в Listview (text1):

import com.commonsware.cwac.endless.EndlessAdapter;

import java.util.ArrayList;
import java.util.HashMap;

public class Read extends ListActivity {

      EndlessAdapter x;
      SQLiteDatabase Db;    
      public Cursor c;
      Integer cx;

      String Hash;

      @Override
      public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.readmain);

        Hash = getIntent().getStringExtra("Hash");
        cx = getIntent().getIntExtra("Count", 0);

        Db = openOrCreateDatabase("/sdcard/test.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);

        ArrayList<HashMap<String,String>> items=new ArrayList<HashMap<String,String>>();

        x = new DemoAdapter(items);
        setListAdapter(x);
      }


      class DemoAdapter extends EndlessAdapter {
        private RotateAnimation rotate=null;

        @SuppressWarnings("unchecked")
        ArrayAdapter<HashMap<String,String>> a=(ArrayAdapter<HashMap<String,String>>)getWrappedAdapter();


          DemoAdapter(ArrayList<HashMap<String, String>> items) {


          super(new ArrayAdapter<HashMap<String, String>>(ReadChat.this,
                                          R.layout.row,
                                          R.id.textas1,
                                          items));

          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.row, null);

          View child=row.findViewById(R.id.textas1);

          child.setVisibility(View.GONE);

          child=row.findViewById(R.id.throbber);
          child.setVisibility(View.VISIBLE);
          child.startAnimation(rotate);

          return(row);
        }

        @Override
        protected boolean cacheInBackground() {
            c = Db.rawQuery("SELECT a, b FROM TableLIMIT "+a.getCount()+", 15",null);

            return(getWrappedAdapter().getCount()< cx);
        }

        @Override
        protected void appendCachedData() {

          String a;
              String b;

          if (c != null ) {
                if  (c.moveToFirst()) {
                      do {
                           a = c.getString(c.getColumnIndex("a"));
                           b = c.getString(c.getColumnIndex("b"));

                           HashMap<String, String> temp = new HashMap<String, String>();                        
                               temp.put("test1", a);
                               temp.put("test2", b);                        
                               a.add(temp); 

                  } while (c.moveToNext());
                }
          }
        }
      }
    }

1 Ответ

2 голосов
/ 21 декабря 2011

Ваши проблемы не имеют ничего общего с EndlessAdapter.

Во-первых, заставьте ваш код работать с ArrayAdapter, игнорируя EndlessAdapter на данный момент.Это потребует от вас научиться создавать пользовательский ArrayAdapter, так как вы быстро обнаружите, что ArrayAdapter мало знает о том, как использовать HashMap<String, String>.Вам нужно будет расширить ArrayAdapter до своего WhateverThisIsAdapter, где вы переопределите getView(), чтобы обрабатывать заливку данных из HashMap<String, String> в раздутые строки, правильно обрабатывая переработку строк. Этот бесплатный отрывок из одной из моих книг продемонстрирует часть этого.

Затем и только тогда оберните рабочий ArrayAdapter в EndlessAdapter.

Кроме того, никогда не проводные пути, так как /sdcard неправильно на большинстве устройств Android.

...