как сделать список интерактивным при заполнении курсором? - PullRequest
2 голосов
/ 28 октября 2011

Я работаю над приложением для 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());

    }




 }
}

1 Ответ

1 голос
/ 28 октября 2011

метод onItemClick имеет параметры

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

Я не уверен, что ваш managedCursor уже перемещен в правильную позицию после его использования внутри onItemClick. вы можете попробовать сначала вызвать его move метод

c.moveToPosition(position)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...