2013-03-20 1 views
0

새 질문 : SQLite 테이블의 문자열 배열 또는 커서에서 모두 아래 코드 조각을 사용할 수 있습니다. 이제는 테이블에서 이러한 값을 문자열 배열로 가져와 조작 할 수있는 방법을 lstAdapter로 표시 할 수 있습니까?
(많은 의견이 추가되기 전에 전체 소스를 제공 할 수 있지만 14 페이지의 10pt 최소 머리글 바닥 글).sqlite에서 커서 데이터를 문자열 배열

여기에서 다른 곳에서 많은 샘플을 시험해 보았습니다. 대부분은 내가 알아 내지 못한 오류를 생성하고, 나머지는 작동하지 않으므로 뭔가를 놓치고 있습니다.

이 구조가 결국 내 WIMM 하나에 대한 응용 프로그램의 일부가 될 것입니다, 그래서 그것이 최선의 방법인지 잘 모르겠어요 안드로이드 버전 7

//From my ...ListFragment: 
//This works; I get "First", "Second", etc. listed on my screen: 
//----------------------- 
private SimpleCursorAdapter mAdapter; 
private ListAdapter lstAdapter; 
. . . 
    Log.d("RemindLF","S onCrt: NEW"); 
// an array of string items to be displayed   
    String[] strLstitems = new String[] 
      {"first", "Second", "Third", "Fourth"}; 
// 
    lstAdapter = new ArrayAdapter<String>(getActivity(), 
      R.layout.reminder_row, R.id.text1, strLstitems); 
// 
// Call to SetListAdapter()informs ListFragment how to fill ListView 
    setListAdapter(lstAdapter); 
    getLoaderManager().initLoader(0, null, this); 
    Log.d("RemindLF","X onCrt:" + strLstitems[0]); 



//This also works; I get the values of one column from each record listed on my screen 
//-------------------------- 
private ArrayAdapter aryAdapter; 
. . . 
    Log.d("RemindLF","X onCrt: BASE"); 
    String[] strItems = new String[] 
     { 
     ReminderProvider.COLUMN_BODY 
     }; 
    Log.d("RemindLF","X onCrt:strI:" + strItems[0]);   
    int[] iCnt = new int[] 
     { 
     R.id.text1 
    }; 

    mAdapter = new SimpleCursorAdapter(getActivity(),R.layout.reminder_row, 
       null, strItems, iCnt, 0); 

    setListAdapter(mAdapter); 
getLoaderManager().initLoader(0, null, this); 



//Other pieces 
//------------ 
//Loader set-up: 
@Override 
public Loader<Cursor> onCreateLoader(int ignored, final Bundle args) 
    { 
    Log.d("RemindLF","S LoadCSR"); 
    return new CursorLoader(getActivity(), ReminderProvider.CONTENT_URI, null, null, null, null); 
    } 
@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) 
    { 
    Log.d("RemindLF","S LoadFin"); 
    mAdapter.swapCursor(cursor); 
    } 


REMINDER_LIST.XM:L 
<?xml version="1.0" encoding="utf-8"?> 
<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:name="com.dummies.android.taskreminder.ReminderListFragment" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 


REMINDER_ROW.XML: 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dip" /> 

답변

4

을 할 필요가 있지만, 당신은 항상 시도 할 수 있습니다 이 같은 : ArrayList에로 또한

private String[] fromCursorToStringArray(Cursor c){ 
    String[] result = new String[c.getCount()]; 
    c.moveToFirst(); 
    for(int i = 0; i < c.getCount(); i++){ 
     String row = c.getString(c.getColumnIndex(ReminderProvider.COLUMN_BODY)); 
     //You can here manipulate a single string as you please 
     result[i] = row; 
     c.moveToNext(); 
    } 
    return result; 
} 

: 물론

private ArrayList<String> fromCursorToArrayListString(Cursor c){ 
    ArrayList<String> result = new ArrayList<String>(); 
    c.moveToFirst(); 
    for(int i = 0; i < c.getCount(); i++){ 
     String row = c.getString(c.getColumnIndex(ReminderProvider.COLUMN_BODY)); 
     //You can here manipulate a single string as you please 
     result.add(row);  
     c.moveToNext(); 
    } 
    return result; 
} 

,이 방법 후 원하는대로 조작 할 문자열의 배열 (목록)을 갖게됩니다. API 7에서 작동해야하며 고급 호출을 사용하지 않습니다.

독자적인 어댑터를 작성하고 SimpleCursorAdapter를 확장하고 getView() 메소드를 대체하여 "즉시"문자열을 수정하는 또 다른 옵션이 있지만이 특정 상황에 대해 나에게 호소하지 않습니다 .

+0

답장을 감사드립니다. 기본적으로 그렇게했습니다. 내 문제는 책의 샘플에서 oncreate 메서드로 수행 된 simplecursoradapter를 사용한다는 것이 었습니다. 그래서이 사이트와 다른 사이트의 샘플을 샘플로 가져 와서 커서를 액세스했습니다. 커서가 정의되지 않았기 때문에 다양한 오류가 발생했습니다. 나는 마침내 onLoadFinished에서이 작업을 수행해야한다고 생각했으며, 모든 작업이 완료되었습니다. 많은 감사, 클라크 – ClarkG