带有SimpleCursorAdapter的android ViewBinder
我想知道我使用ViewBinder的解决方案是否正确,是否适合我的问题 我已经实现了一个内容提供者。startactivity扩展了ListActivity,并使用MyContentProvider显示sqliteDB中的所有条目。单击listview中的一个条目将启动另一个活动,显示有关此条目的详细信息:带有SimpleCursorAdapter的android ViewBinder,android,listview,android-listview,simplecursoradapter,Android,Listview,Android Listview,Simplecursoradapter,我想知道我使用ViewBinder的解决方案是否正确,是否适合我的问题 我已经实现了一个内容提供者。startactivity扩展了ListActivity,并使用MyContentProvider显示sqliteDB中的所有条目。单击listview中的一个条目将启动另一个活动,显示有关此条目的详细信息: public void onItemClick(AdapterView<?> parent, View view, int position, long
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// Arzneimittel wurde durch Klick ausgewählt --> Detailansicht anzeigen
Intent intent = new Intent(this, MedikamenteDetailActivity.class);
intent.putExtra("_ID", id);
startActivity(intent);
}
在该活动中,我为die ViewBinder实现了一个内部类:
private class ViewBinder implements SimpleCursorAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if(view.getId() == R.id.txtV_PhZnr) {
TextView phznr = (TextView)view;
phznr.setText(cursor.getString(columnIndex));
return true;
}
return false;
}
}
绑定工作,但数据绑定到listview。其他ViewElements保持为空。我真的不明白,为什么我设置了视图“R.id.txtV_PhZnr”的文本,而当txtV_PhZnr保持为空时,该文本出现在listview元素中
为什么我需要listView元素。由于这是一个主-细节关系,因此在细节视图中只能显示一个数据集
多谢各位
为什么我需要listView元素
不,你不需要。您只需从内容提供商加载数据,并将其绑定到您定义的TextView
s(ID为txtV_xxx
)即可。在onLoadFinished()
方法中执行此操作
我真的不明白,为什么我设置了视图“R.id.txtV_PhZnr”的文本,而当txtV_PhZnr保持为空时,该文本出现在listview元素中
传递给ViewBinder
的setViewValue()
方法的view
参数将仅具有实例化SimpleCursorAdapter
的视图ID数组中的一个ID。在您的例子中,view
参数将只有idandroid.R.id.text1
,因为传入的数组只包含此视图id。因此,if(view.getId()==R.id.txtV_PhZnr){…}
的主体将永远不会执行。因此txtV_PhZnr
保持为空
ViewBinder
仅在需要根据某些条件更改数据与视图的绑定时使用。就您的情况而言,既不需要ListView
也不需要ViewBinder
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_medikamente_detail);
_id = String.valueOf(getIntent().getExtras().getLong("_ID"));
mAdapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
null,
mFromColumns,
new int[]{android.R.id.text1},
0);
mCallbacks = this;
ListView mListView = (ListView) findViewById(R.id.datalist);
mAdapter.setViewBinder(new ViewBinder());
mListView.setAdapter(mAdapter);
getLoaderManager().initLoader(URL_LOADER, null, mCallbacks);
}
private class ViewBinder implements SimpleCursorAdapter.ViewBinder {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if(view.getId() == R.id.txtV_PhZnr) {
TextView phznr = (TextView)view;
phznr.setText(cursor.getString(columnIndex));
return true;
}
return false;
}
}