1

我第一次使用 ListFragments。我想显示来自 sqlite 数据库的数据。

我的问题:我无法检索上下文。

我在扩展 ListFragment 的类中尝试了 this.getActivity(),但上下文为空。

然后我尝试将我的应用程序的第一个活动(启动应用程序后显示的 ui)的上下文保存为静态变量。但这是正确的背景吗?

static Context context; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Setting the context
        context = this; 

        setContentView(R.layout.main);
    }

    public static Context getContext() {
        return context;
    } 

当我查询数据库时,我没有得到任何异常,但光标始终为空。我查看了我的 sqlite 数据库 - 我有三行数据(因此光标不应为空)。

我从数据库中查询数据的代码:

Cursor cursor = null;
        try{
            open();
            cursor = database.rawQuery("select _id, surname, prename, street, zipcode, telephone, email from "+Database.getMyDbTable()+";", null);
        }catch(Exception ex){
            Log.e(TAG, "Could not get list");
            CharSequence text = "Die Liste kann nicht erstellt werden!";
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
        }
        Log.d(TAG, "Cursor "+cursor); 
        close(); 

我如何获得正确的上下文?

4

2 回答 2

2

我发现这个教程很有帮助(因为我想要一个标签布局与一个列表相结合):

https://github.com/artem-zinnatullin/Android-List-Fragment-Tutorial

我修改了 onCreate 方法:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        //Getting the data from the Database
        Context myContext = getActivity();           
        Log.d(TAG, "Context "+myContext);

        contactListManager = new ContactList(myContext);
        Log.d(TAG, "ContactListManager "+contactListManager);

        Cursor cursor =  contactListManager.fetchAllItems();
        Log.d(TAG, "Cursor "+cursor);

使用此代码,我可以访问我的数据库。

于 2013-02-04T17:22:46.263 回答
0

感谢您的回答!我确认我也可以通过使用...来解决同样的问题

上下文 myContext = getActivity();

显然 ListPreference(this) 在 PreferenceFragment 内部不起作用。

于 2013-06-28T03:00:31.900 回答