ArrayAdapter<HashMap <,, >> с классом EndlessAdapter.
Как использовать 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 ответ
Ваши проблемы не имеют ничего общего с EndlessAdapter
,
Во-первых, получите ваш код, работающий с ArrayAdapter
, игнорируя EndlessAdapter
теперь. Это потребует от вас научиться создавать кастомы ArrayAdapter
, как вы быстро обнаружите, что ArrayAdapter
мало знает о том, как использовать HashMap<String, String>
, Вам нужно будет продлить ArrayAdapter
к себе WhateverThisIsAdapter
где вы переопределяете getView()
обрабатывать заливку данных из вашего HashMap<String, String>
в раздутые ряды, правильно обращаясь с вашей переработкой строк. Этот бесплатный отрывок из одной из моих книг продемонстрирует некоторые из них.
Тогда и только тогда, заверните рабочий ArrayAdapter
в EndlessAdapter
,
Кроме того, никогда не проводные пути, как /sdcard
неправильно на большинстве устройств Android.