Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有SimpleCursorAdapter的android ViewBinder_Android_Listview_Android Listview_Simplecursoradapter - Fatal编程技术网

带有SimpleCursorAdapter的android ViewBinder

带有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

我想知道我使用ViewBinder的解决方案是否正确,是否适合我的问题

我已经实现了一个内容提供者。startactivity扩展了ListActivity,并使用MyContentProvider显示sqliteDB中的所有条目。单击listview中的一个条目将启动另一个活动,显示有关此条目的详细信息:

    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
参数将只有id
android.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;
        }

    }