Android:将数据库中的数据提取到ListFragment中
正在将数据库中的数据提取到LisFragment中。我需要在MainActivity.java中使用此ListFragment文件内容 扩展ListFragment的第二个活动:Android:将数据库中的数据提取到ListFragment中,android,database,fragment,Android,Database,Fragment,正在将数据库中的数据提取到LisFragment中。我需要在MainActivity.java中使用此ListFragment文件内容 扩展ListFragment的第二个活动: String DB = "TestDB"; String TABLE_NAME = "addcamera"; SQLiteDatabase sampleDB = null; ArrayList<String> results = new ArrayList<String>(); @Overrid
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);
}
<?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>
String DB=“TestDB”;
字符串表_NAME=“addcamera”;
SQLiteDatabase sampleDB=null;
ArrayList结果=新建ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sampleDB=SQLiteDatabase.openOrCreateDatabase(DB,null);
游标c=sampleDB.rawQuery(“从”+表名称中选择CameraName,null);
如果(c!=null){
if(c.moveToFirst()){
做{
字符串CameraName=c.getString(c.getColumnIndex(“CameraName”);
结果:添加(CameraName);
}而(c.moveToNext());
}
}
ArrayAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple\u list\u item\u 1,结果);
}
main.xml:
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);
}
<?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>
有人能帮我吗?好吧,第一件事是-你的
活动不应该扩展列表片段
,你自己的片段
类应该这样做。希望我没有误解任何事情。:-)
但是,您可以很容易地将您的ListFragment
衍生工具视为ListActivity
,即您可以使用getListView()
方法从XML中获取ListView
对应的元素(@android:id/list
)
看到你已经有了<代码>光标< /代码>就绪,你应该考虑使用<代码> SimuleCurraseCudio并让它管理光标,* *你需要做的是指定用元素填充的字段。
例如:
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();
}
}
公共类CustomListFragment扩展了ListFragment{
//属性
私有上下文;
私人停车场平面布置;
私有sqlitedatabasemsampledb;
私有列表mResults;
私有游标mCursor;
//元素
私有列表视图;
私有SimpleCursorAdapter-mListAdapter;
//常数
私有最终字符串DB=“TestDB”;
私有最终字符串表\u NAME=“addcamera”;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//设定我们的属性
mContext=getActivity();
mLayoutInflater=充气机;
//让我们充气并返回视图
视图=mLayoutFlater.充气(R.layout.your\u fragment\u布局,容器,false);
//获取数据库处理程序&游标
mSampleDb=SQLiteDatabase.openOrCreateDatabase(DB,null);
mCursor=mSampleDb.rawQuery(“从”+表名称中选择CameraName,null);
//初始化
初始(视图);
//返回
返回视图;
}
公共void init(视图v){
//设置listAdapter
mListAdapter=新的SimpleCursorAdapter(
McContext,
R.layout.your_list_item_布局,
光标,
新字符串[]{“database_table_1”,“database_table_2”},
新int[]{R.id.element_1,R.id.element_2}
)
);
setAdapter(mListAdapter);
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
Toast.makeText(mContext,“点击POS#“+POS+”!”,Toast.LENGTH\u SHORT.show();
}
}
谢谢您的评论。将根据您的评论进行尝试。如果有不清楚的地方,请告诉我,我将尽力解释我上面写的内容。:-)我不知道如何实现这一点。你能帮我检查一下我上面更新的答案吗,不过你得在你的项目中做一些小的修改@ninetwozero您能提供任何易于阅读的源代码,从中我可以理解如何将游标集成到ListFragment吗?提前谢谢