Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:将数据库中的数据提取到ListFragment中_Android_Database_Fragment - Fatal编程技术网

Android:将数据库中的数据提取到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

正在将数据库中的数据提取到LisFragment中。我需要在MainActivity.java中使用此ListFragment文件内容

扩展ListFragment的第二个活动:

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吗?提前谢谢