android – 如何在ListView(使用Loader)中显示游标之前 *** 纵游标数据?

android – 如何在ListView(使用Loader)中显示游标之前 *** 纵游标数据?,第1张

概述我的SherlockListFragment的每个项目都包含3个TextView:一个名称和两个数字. 数据来自我的数据库的表目标,其具有以下结构: CREATE TABLE objective ( _id INTEGER PRIMARY KEY, id_project INTEGER NOT NULL, activity_code INTEGER NOT NULL, 我的SherlockListFragment的每个项目都包含3个TextVIEw:一个名称和两个数字.
数据来自我的数据库的表目标,其具有以下结构:

CREATE table objective (    _ID INTEGER PRIMARY KEY,ID_project INTEGER NOT NulL,activity_code INTEGER NOT NulL,day_duration INTEGER NOT NulL,week_frequency INTEGER NOT NulL,FOREIGN KEY(ID_project) REFERENCES project(ID_project));

此外,我已经读过从光标填充列表应该通过使用加载器来完成(特别是在使用数据库时,因为它可能是一个非常慢的 *** 作).
我找到了一个SimpleCursorLoader类here on stackoverflow,但它直接将数据映射到一个字段.

这不是我想要的,因为正如你所看到的,在我的目标表中我有一个activity_code.所以我想用一个字符串替换它(我有一个Enum,它列出了我的所有活动代码,并为每个代码返回一个字符串资源标识符).

你知道如何在TextVIEws中显示数据之前 *** 作数据吗?

这是我的SherlockListFragment

public class ObjectivesdisplayFragment extends SherlockListFragment implements LoaderManager.LoaderCallbacks<Cursor>{    private Activity activity;    private SimpleCursorAdapter adapter;    @OverrIDe    public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState)     {        return inflater.inflate(R.layout.objectives_display,container,false);    }    @OverrIDe    public voID onActivityCreated(Bundle savedInstanceState)    {        super.onActivityCreated(savedInstanceState);        activity = getActivity();        String[] columns = new String[] { "activity_code","day_duration","week_frequency" };        int[] to = new int[] { R.ID.activityname,R.ID.objectiveDuration,R.ID.objectiveFrequency };        getLoaderManager().initLoader(0x01,null,this);        adapter = new SimpleCursorAdapter(activity.getApplicationContext(),R.layout.objective_row,columns,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);        setlistadapter(adapter);    }    public Loader<Cursor> onCreateLoader(int arg0,Bundle arg1) {        return new SimpleCursorLoader(activity) {            @OverrIDe            public Cursor loadInBackground() {                DatabaseHelper dbHelper = DatabaseHelper.getInstance(activity);                String query = "SELECT _ID,activity_code,day_duration,week_frequency FROM objective WHERE ID_project = ?";                String[] args = new String[] { "1" }; // projectID                Cursor results = dbHelper.getReadableDatabase().rawquery(query,args);                return results;            }        };    }    public voID onLoadFinished(Loader<Cursor> arg0,Cursor cursor) {        adapter.swapCursor(cursor);    }    public voID onLoaderreset(Loader<Cursor> arg0) {        adapter.swapCursor(null);    }}

编辑:我不需要关闭SimpleCursorLoader中的光标和数据库> loadInBackground,对吧?否则无法读取数据.关闭 *** 作是自动处理还是我需要在其他地方自己完成?

解决方法 我想这可能适合你:

adapter.setVIEwBinder(new VIEwBinder(){        @OverrIDe        public boolean setVIEwValue(VIEw vIEw,Cursor cursor,int columnIndex) {            String label = "Inactive";            if(columnIndex == 4) {                if(cursor.getInt(columnIndex) == 1) {                    label = "Active";                }                TextVIEw tv = (TextVIEw) vIEw.findVIEwByID(R.ID.status);                tv.setText(label);                return true;            }            return false;        }    });    setlistadapter(adapter);

背景信息:我在表中有一个外键列(整数),并希望在列表视图中填充时解析为它的字符串值(来自链接表).列位于第4个索引(set中的第5列),因此只使用setVIEwBinder()来 *** 作所需的列.

此外,我的布局有5个文本视图,用于显示光标中的5个字段.这里还有一点值得注意的是,当使用“if”条件来捕获列索引时,请确保每个条件块必须包含“return true”.在这种情况下,解释器达到“返回假” – 意味着你的领域没有被 *** 纵.

我确信上面的代码块非常简单易懂.

总结

以上是内存溢出为你收集整理的android – 如何在ListView(使用Loader)中显示游标之前 *** 纵游标数据?全部内容,希望文章能够帮你解决android – 如何在ListView(使用Loader)中显示游标之前 *** 纵游标数据?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1127267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存