7

私は受け付けておりCursorLoaderを作成するときにエラー「swapCursor(カーソル)を未定義です」。私はandroid.support.v4(app.LoaderManager、app.LoaderManager.Loader、Content.CursorLoader、content.Loader)をインポートしました。この問題を解決するために私が何ができるか分かりません。お知らせ下さい。swapCursor未定義のエラー

ローダー:あなたは2番目の引数としてListViewを渡すアダプタを初期化し、あなたのonCreate()方法で

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.LoaderManager; 
import android.support.v4.content.CursorLoader; 
import android.support.v4.content.Loader; 
import android.support.v4.app.ListFragment; 
import android.support.v4.widget.CursorAdapter; 



public class LoginList extends FragmentActivity implements OnClickListener, 
AdapterView.OnItemClickListener, LoaderManager.LoaderCallbacks<Cursor> { 

    private ListView loginList; 
    private Button webLogin; 
    private SimpleCursorAdapter adapter; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login_listview); 

     loginList = (ListView)findViewById(R.id.loginlist); 
     loginList.setOnItemClickListener(this); 

     webLogin = (Button)findViewById(R.id.button3); 
     webLogin.setOnClickListener(this); 



     //Specify fileds to display in the list 
     String[] from = new String[] { ListProvider.COLUMN_NAME_SITE }; 

     //Bind fields to listview 
     int[] to = new int[] {R.id.loginlist}; 

     // Create CursorAdapter and set it to display 
     adapter = new SimpleCursorAdapter(this, R.layout.login_listview, null, from, to); 

     loginList.setAdapter(adapter); 

     getSupportLoaderManager().initLoader(0, null, this); 
    } 

    /*@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 

    super.onViewCreated(view, savedInstanceState); 
    setEmptyText(getResources().getString(string.app_name)); 
    rwgisterForContextMenu(getListView()); 
    setHasOptionsMenu(true); 
     } */ 


    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 

     Toast.makeText(getApplicationContext(), "Selected ID :" + arg2, Toast.LENGTH_SHORT).show(); 

     Intent updateDeleteLoginInfo = new Intent (this, UpdateDeleteLoginList.class); 


     Cursor clickedObject = (Cursor)loginList.getItemAtPosition(arg2); 

     Bundle loginBundle = new Bundle(); 
     loginBundle.putString("clickedWebSite",((LoginDetails) clickedObject).getsName()); 
     loginBundle.putString("clickedWebAddress",((LoginDetails) clickedObject).getwUrl()); 
     loginBundle.putString("clickedUserName",((LoginDetails) clickedObject).getuName()); 
     loginBundle.putString("clickedPassWord",((LoginDetails) clickedObject).getpWord()); 
     loginBundle.putString("clickedNotes",((LoginDetails) clickedObject).getlNotes()); 

     updateDeleteLoginInfo.putExtras(loginBundle); 

     startActivityForResult(updateDeleteLoginInfo, 0); 
    } 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     Intent webLoginIntent = new Intent (this, LoginPlusActivity.class); 
     startActivity(webLoginIntent); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int ignored, final Bundle args) { 
     return new CursorLoader(this, ListProvider.CONTENT_URI, null, null, null, null); 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
     adapter.swapCursor(cursor); /* swapCursor error: The method swapCursor(Cursor) is undefined for the type SimpleCursorAdapter */ 


    } 

    @Override 
    public void onLoaderReset (Loader<Cursor> loader) { 
     adapter.swapCursor(null); /* swapCursor error: The method swapCursor(Cursor) is undefined for the type SimpleCursorAdapter */ 

    } 
} 
+2

あなたがandroid.support.v4.widget.CursorAdapter'なく 'android.widget.CursorAdapter' –

+0

@vmironovを追加しましたインポートが、エラーがおそらくまだ言って何を意味するのかvmironov – user1165694

+0

をexsistが使用する'インポートしていることを確認してください'android.widget.SimpleCursorAdapter'ではなく' android.support.v4.widget.SimpleCursorAdapter'です。また、 'changeCursor'は、すべてのリリースで利用可能ですが、読むことは不可能であるbecouse、あなたは上記のコードをフォーマットすることができ、古いカーソル(そうローダコードはおそらく失敗します) – Delyan

答えて

0

。これは間違っている、それはリスト内の各アイテムのためにインスタンスを生成するレイアウトのIDでなければなりません:

あなたのコードは、私には正常に見えること以外
adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to); 

。私はListFragmentを使用している私の作業コードと比較していますので、UIをインスタンス化せずにonActivityCreated(Bundle)メソッドをオーバーライドします。

ContentProviderでデータベースから抽出したデータ量を減らすための予測を提供するのに問題がありましたが、nullを渡すことは問題ではありません。

しかし、あなたはあなたのContentProvierであれば「_id」主キー列を提供していることを確認します。 ListView(および他のウィジェットの一部)を使用するには、私はすでに私の主キーとして完全に受け入れUUIDを持っていたとして、私は本当に不便たロングベースの主キーを、持っている必要があります。代わりswapCursorのLoaderManager.LoaderCallbacksとchangeCursor()を使用する方法に関する

2

例()。

@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    return new CursorLoader(this, DB_table.CONTENT_URI, DB_table.PROJECTION,null,null,null); 
} 

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    mAdapter.changeCursor(data); 
} 

@Override 
public void onLoaderReset(Loader<Cursor> loader) { 
    mAdapter.changeCursor(null); 
} 

古いAPIの者のためのAPIで利用可能な11 swapCursor()を使用する場合は、サポートライブラリからCursorAdapterをインポートすることを忘れないでください。

import android.support.v4.widget.CursorAdapter;