Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何在ListView(使用Loader)中显示游标之前操纵游标数据?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的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)中显示游标之前操纵游标数据?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。