我的ListView在我的应用程序中通过SQLitle db从游标填充..看起来像这样:
public void updateShiftList(String x) {
db.openToRead();
listShifts = (ListView) findViewById(R.id.listShifts);
// get data
cursor = db.getPlan(x);
startManagingCursor(cursor);
// set adapter
String[] from = { dataManager.KEY_SHIFT, dataManager.KEY_DATE };
int[] to = { R.id.rowShift, R.id.rowDate };
adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);
listShifts.setAdapter(adapter);
db.close();
}
在row.xml中我在每行之前有图像,我想在创建这个ListView期间实现函数或检查方法,这会根据我要测试的一些参数来改变图像,例如R.id.rowDate == TodayDate(该文本字段中有日期)或者如果R.id.rowDate是今天的下一个日期....
我怎么能这样做,或者......哪里有可以使用的Overide?我在这个简单的项目上学习java,因为我正在这样做,所以要温柔:)
谢谢大家, 维拉德
答案 0 :(得分:1)
再次......
构建使用您的数据的自定义适配器......
每当你想用ListView中的视图进行处理时 需要创建一个可以处理逻辑的自定义适配器 实现并在必要时将该信息传递给视图。
示例强>
答案 1 :(得分:0)
以下是我的代码的摘录。我在我的许多项目中使用它,从数据库收集数据并在ListView中显示它们。有用。你需要稍微调整一下你的项目。无论如何,我建议重写你的代码。 图像的东西在底部:
package my.package;
import android.app.Activity;
public class MyActivity extends Activity {
private DBAdapter mDb;
private ListView mListView;
private Cursor mCursor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.groups_list);
mDb = new DBAdapter(this);
mDb.open();
populateListView();
}
@Override
public void onDestroy() {
super.onDestroy();
if(mCursor != null)
mCursor.close();
mCursor = null;
if(mDb != null)
mDb.close();
mDb = null;
}
private void populateListView(){
if(mCursor!=null) //close the old one first
mCursor.close();
mCursor = mDb.getSomeDataCursor();
MainAdapter adapter = new MainAdapter(this, R.layout.groups_list_item, mCursor, false);
mListView.setAdapter(adapter);
}
private class MainAdapter extends ResourceCursorAdapter{
private int mLayout;
private int mColumnIndexGroup;
public MainAdapter(Context pContext, int pLayout, Cursor pCursor, boolean pAutoRequery) {
super(pContext, pLayout, pCursor, pAutoRequery);
mLayout = pLayout;
mColumnIndexGroup = (pCursor.getColumnIndex(DBAdapter.COL_NAME));
}
@Override
public View newView(Context pContext, Cursor pCursor, ViewGroup pParent) {
LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return li.inflate(mLayout, pParent, false);
}
@Override
public void bindView(View pView, Context pContext, Cursor pCursor) {
TextView tvGroup = (TextView)pView.findViewById(R.id.groupsListTVGroup);
tvGroup.setText(pCursor.getString(mColumnIndexGroup));
//Image stuff - an example
if(pCursor.getInt(pCursor.getColumnIndex(SOMETHING)) == SOME_VAL){
ImageView img = (ImageView) pView.findViewById(R.id.myImage);
img.setImageResource(R.drawable.myImage)
}
}
}
}