2012-07-10 78 views
2

從數據庫提取數據到LisFragment中。我需要使用這個ListFragment文件內容到MainActivity.java中。延伸ListFragmentAndroid:將數據從數據庫提取到ListFragment中

SecondActivity:

String DB = "TestDB"; 
String TABLE_NAME = "addcamera"; 
SQLiteDatabase sampleDB = null; 
ArrayList<String> results = new ArrayList<String>(); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
sampleDB = SQLiteDatabase.openOrCreateDatabase(DB, null);   
Cursor c = sampleDB.rawQuery("SELECT CameraName FROM " + TABLE_NAME , null);    
if (c != null) { 
if (c.moveToFirst()) { 
do { 
    String CameraName = c.getString(c.getColumnIndex("CameraName")); 
    results.add(CameraName); 
    }while (c.moveToNext()); 
} 
} 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, results); 
} 

的main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:name="com.exercise.FragmentTest.SecondActivity" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/image_list_fragment"> 
</fragment> 
</LinearLayout> 

任何人都可以helpme?

回答

4

那麼,第一件事的第一件事 - 你的Activity不應該延伸ListFragment,你自己的Fragment類應該這樣做。希望我沒有誤解任何東西。 :-)

然而,你可以很容易地看到你的ListFragment衍生物作爲ListActivity,即你可以使用getListView()方法從你的XML得到了ListView相應的元素(@android:id/list)。

看到您已經準備好了Cursor,您應該考慮使用SimpleCursorAdapter並讓它爲您管理遊標,並且*所有*您需要執行的操作是指定用哪些字段填充元素。

例子:

getListView().setAdapter( 
    new SimpleCursorAdapter(
     getActivity(), 
     R.layout.your_list_item_layout, 
     cursor, 
     new String[] { "database_table_1", "database_table_2" }, 
     new int[] { R.id.element_1, R.id.element_2 } 

    ) 
); 

更新:

這是你的自定義ListFragment可能是什麼樣子:

public class CustomListFragment extends ListFragment { 

    // Attributes 
    private Context mContext; 
    private LayoutInflater mLayoutInflater; 
    private SQLiteDatabase mSampleDb; 
    private List<String> mResults; 
    private Cursor mCursor; 

    // Elements 
    private ListView mListView; 
    private SimpleCursorAdapter mListAdapter; 

    // Constants 
    private final String DB = "TestDB"; 
    private final String TABLE_NAME = "addcamera"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     // Set our attributes 
     mContext = getActivity(); 
     mLayoutInflater = inflater; 

     // Let's inflate & return the view 
     View view = mLayoutInflater.inflate(R.layout.your_fragment_layout, container, false); 

     // Get the database handler & the cursor 
     mSampleDb = SQLiteDatabase.openOrCreateDatabase(DB, null);   
     mCursor = mSampleDb.rawQuery("SELECT CameraName FROM " + TABLE_NAME , null); 

     // Init 
     init(view); 

     // Return 
     return view; 

    } 

    public void init(View v) { 

     // Setup the listAdapter 
     mListAdapter = new SimpleCursorAdapter(

      mContext, 
      R.layout.your_list_item_layout, 
      cursor, 
      new String[] { "database_table_1", "database_table_2" }, 
      new int[] { R.id.element_1, R.id.element_2 } 

      ) 
     ); 
     mListView.setAdapter(mListAdapter); 

    } 

    @Override 
    public void onListItemClick(ListView l, View v, int pos, long id) { 

     Toast.makeText(mContext, "CLICKED ON POS #" + pos + "!", Toast.LENGTH_SHORT).show(); 

    } 
} 
+0

感謝您的意見。將根據您的意見進行嘗試。 – Maddy 2012-07-10 09:11:11

+0

如果有些事情不清楚,請告訴我,我會盡我所能解釋我上面寫的內容。 :-) – ninetwozero 2012-07-10 09:12:54

+0

我不知道如何實現這一點。你能幫我嗎 – Maddy 2012-07-10 09:17:38