java - 使用游标对象填充时如何使列表可点击?

标签 java android listview cursor

我正在开发一个 Android 应用程序,用于列出存储在浏览器中并使用游标和游标适配器填充到列表中的书签。我在填充列表时完全没有问题,我的问题全在于点击。我正在使用 onItemClickListener,当用户单击列表项时,应用程序崩溃。

logcat 输出如下:

10-27 23:54:22.718: ERROR/CursorWindow(315): Bad request for field slot 0,2131034113.    
numRows = 15, numColumns = 12

10-27 23:54:22.738: ERROR/AndroidRuntime(315): java.lang.IllegalStateException: get    
field slot from row 0 col 2131034113 failed

下面是我的代码。

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Browser;
import android.provider.Browser.BookmarkColumns;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;



@SuppressWarnings("unused")
public class BookmarksActivity extends ListActivity {
/** Called when the activity is first created. */
@Override   
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    Uri bookmarks = Browser.BOOKMARKS_URI;
     final Cursor managedCursor = managedQuery(bookmarks, null, null, null, null );
   // Cursor managedCursor = managedQuery(bookmarks, bookmark, null, null,
BookmarkColumns.TITLE  );

    String[] bookmark = new String[]{
        BookmarkColumns.TITLE,
        BookmarkColumns.URL,
        BookmarkColumns._ID,
        };


    // Bind to our new adapter.


    int[] views = new int[] {R.id.urlTitle, R.id.urlUrl};

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.main,
managedCursor, bookmark, views);
    this.setListAdapter(adapter);

    //list = (listView)adapter;

   this.getListView().setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {

            // TODO Auto-generated method stub
            Intent i = new Intent(android.content.Intent.ACTION_VIEW,
                    Uri.parse(managedCursor.getString(R.id.urlUrl)));
            startActivity(i);
        }

    });

    getColumnData(managedCursor);


}



//getColumnData will go through the supplied cursor and get the data we need
// in this case webpage titles and urls.
// i will late implement the favicon.
 private void getColumnData(Cursor cur)
 {
    if (cur.moveToFirst()){

        String title;
        String url;

        int titleColumn = cur.getColumnIndex(BookmarkColumns.TITLE);
        int urlColumn = cur.getColumnIndex(BookmarkColumns.URL);

        String imagePath;

        do{
            title = cur.getString(titleColumn);
            url = cur.getString(urlColumn);

            Log.d("+-CURSOR-+", title + " " + url);

        }while(cur.moveToNext());

    }




 }
}

最佳答案

onItemClick 方法有参数

AdapterView<?> parent, View view, int position, long id

我不确定您的 managedCursor 在您的 onItemClick 中使用时是否已经移动到正确的位置。你可以尝试调用它的move方法先行

c.moveToPosition(position)

关于java - 使用游标对象填充时如何使列表可点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924016/

相关文章:

C# - 将 ListView 列中的文本转换为密码字符

java - 如何找到由 native 代码引起的 JVM 崩溃的根本原因

Java RSS 通知管理器

java - 序列化器 SimpleXML 只发送第一行

android - adb connect 连接被拒绝

android - 无法在 ListView 项目中正确选择文本

c++ - QML 中的 ListView - 空行

java - 实现属性和技能系统

java - 为什么 PathparentPath = Paths.get(strPath) 会改变分隔符?

android - 如何获取数据库路径和名称