【问题标题】:Using SQLite, possible to populate a listview in a fragment activity based on the column value of the selected list item in the previous activity?使用 SQLite,可以根据上一个活动中所选列表项的列值在片段活动中填充列表视图吗?
【发布时间】:2015-12-17 05:37:35
【问题描述】:

这是一个建筑材料清单制作应用程序。

在主要活动中,列表视图填充了所有当前建设项目的名称。每个项目在项目表中都有一个 rowid。

还有一个列表表。每个列表都属于一个项目,一个项目可以有多个列表。 lists 表中的每个列表(行)都会有一个项目 rowid 对应于它所属的项目。

目标是能够从主要活动中选择一个项目,启动片段活动,并仅填充属于所选项目的列表。这可能吗?如何才能做到这一点?有人请帮帮我。

我没有展示代码,因为我觉得它非常基础。正在考虑我需要将项目 rowid 传递到片段活动中,并使用 where 子句创建一个 fetch 方法,以仅显示包含匹配项目 rowid 的列表。想法?

【问题讨论】:

  • 我在您的问题本身中找到了答案。您在答案中寻找的任何具体内容?
  • 在片段活动中创建 fetch 方法时遇到问题。尝试使用在数据库适配器类中创建的相同 fetch 方法,但是当涉及到表和列时“无法解析符号 'LISTS_TABLE'”。与列相同。另外,我真的不知道如何构造查询,以便游标适配器使用传递的项目 rowid 变量。
  • 那么在这种情况下,您需要发布您的databasehelper 课程和fragment activity 课程代码,以帮助我们获得清晰的图片..
  • 你能发布你在CurrentProjectDrafts.java类中遇到的错误的Logcat吗?

标签: android sqlite listview android-fragments


【解决方案1】:

在主要活动中选择您的项目。 获取项目的 ID(主键) 将 ID 作为参数发送到片段 Activity。 然后打开新活动。 在加载片段活动时,获取您拥有的项目ID的列表

【讨论】:

  • 我可以将Extra/getExtra放在项目rowid上,从主要活动到片段。如何在使用项目 rowid 作为搜索条件的片段活动中组合查询?
  • 如果您想看一看,这里是代码的链接。 github.com/JohnnyJacker/GoFor
【解决方案2】:

这是对我有用的代码。

给数据库适配器内部的 getCurrentLists 方法一个参数。在片段活动开始时,它从主活动列表选择中获取项目 rowid 变量,并将其作为参数参数传递给游标以用于简单的游标适配器。

如果我没有使用正确的术语,请纠正我,这样我可以学得更快!感谢您的推动!

下面是我的 CurrentProjectDrafts.java

public class CurrentProjectDrafts extends Fragment {


NewProjectDatabaseAdapter db;
String sqlNewListProjectRowid;






@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.current_project_drafts_tab, container, false);

    String project_rowid = getActivity().getIntent().getExtras().getString("project_rowid");
    sqlNewListProjectRowid = project_rowid;

    Toast.makeText(getActivity(), project_rowid, Toast.LENGTH_LONG).show();


    try{
        openDB();
        NewProjectDatabaseAdapter dbFetch = new NewProjectDatabaseAdapter(getActivity());



    } catch (SQLException e){
        e.printStackTrace();
    }


//Testing fetching projects info from database to populate list
    Cursor cursor1 = null;
    try {
        cursor1 = NewProjectDatabaseAdapter.getCurrentLists(project_rowid);
    } catch (SQLException e) {
        e.printStackTrace();
    }

    getActivity().startManagingCursor(cursor1);


///setup mapping from cursor to view fields//////
    String[] fromDatabase = new String[]
            {NewProjectDatabaseAdapter.KEY_LIST_NAME};

    int[] toList = new int[]
            {R.id.project_name};

////create adapter to map columns of database to rows in listview
    @SuppressWarnings("deprecation") final
    SimpleCursorAdapter myCursorAdapter1 =
            new SimpleCursorAdapter(
                    getActivity(),
                    R.layout.main_activity_projects_list_item,
                    cursor1,
                    fromDatabase,
                    toList,
                    0
            );

    ListView lv = (ListView) v.findViewById(R.id.currentProjectDraftList);

    lv.setAdapter(myCursorAdapter1);

    return v;
}


//This method creates a new instance of open database method in NewProjectDatabaseAdapter.java
private void openDB() throws SQLException {
    db = new NewProjectDatabaseAdapter(getActivity());
    NewProjectDatabaseAdapter.open();


}
}

这是在我的 NewProjectDatabaseAdapter.java

中创建的 fetch 方法
public static Cursor getCurrentLists(String project_rowid) throws SQLException
{
    Cursor bCursor = ourDatabase.query(LISTS_TABLE, null, "project_rowid=?", new String[]{project_rowid}, null, null, null);
    if (bCursor != null){
        bCursor.moveToFirst();
    }
    return bCursor;
}

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2011-04-21
    相关资源
    最近更新 更多