7

bir alıcı am hatası "swapCursor (İmleç) tanımsız". Android.support.v4 (app.LoaderManager, app.LoaderManager.Loader, Content.CursorLoader, content.Loader) dosyasını aldım. Bu sorunu düzeltmek için neler yapabileceğimi bilmiyorum. tavsiye lütfen.swapCursor tanımlanmamış hata

yükleyici: senin onCreate() yöntemde

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

emin 'ithal android.support.v4.widget.CursorAdapter' değil' android.widget.CursorAdapter' –

+0

@vmironov ithalat ancak hata eklendi muhtemelen hala demek istedi – user1165694

+0

Ne vmironov exsist sağlarız kullanmaktır android.widget.SimpleCursorAdapter' yerine android.support.v4.widget.SimpleCursorAdapter'. Alternatif olarak, 'changeCursor' tüm sürümlerde kullanılabilir ancak eski imleci kapatmak için dezavantajı vardır (bu yüzden Loader kodu muhtemelen başarısız olacaktır) – Delyan

cevap

0

Eğer adaptör ikinci argüman olarak ListView geçen başlatmak. Bu yanlıştır, bu bir düzen kimlik listesindeki her öğe için örneğini olmalıdır:

kodunuzu bana iyi göründü daha
adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to); 

Diğer. Ben bir ListI parçası kullanılan benim çalışma kodu karşı karşılaştırıldı, bu yüzden bir UI başlatmak değil, onActivityCreated(Bundle) yöntemini geçersiz kılmak.

Veritabanımdan çıkarılan veri miktarını ContentProvider ile kesmek için bir izdüşüm sağlama sorununu çözdüm, ancak null geçmesi sorun olmamalı.

Ama sen ContentProvier bir sürece "_ID" birincil anahtar sütunu sağladığını kontrol ederim. ListView'u (ve diğer bazı widget'ları) kullanmak için, birincil anahtarım olarak zaten kabul edilebilir bir UUID olduğum için gerçekten uygunsuz olan Uzun tabanlı bir birincil anahtarınız olması gerekir. yerine swapCursor ait LoaderManager.LoaderCallbacks) ile changeCursor (kullanımı ile ilgili

2

Örnek().

@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); 
} 

Eski API yıllardan API 11 mevcut swapCursor() kullanmak istiyorsanız, destek kütüphanesinden CursorAdapter içe aktarmayı unutmayın.

import android.support.v4.widget.CursorAdapter; 
İlgili konular