【问题标题】:Android - SQLite Database retrieving of values then output as looped Checkboxes based on the amount of IDs in Database [closed]Android - SQLite 数据库检索值,然后根据数据库中的 ID 数量输出为循环复选框 [关闭]
【发布时间】:2016-09-13 00:36:15
【问题描述】:

Mock Up of the App I'm trying to make.

选择:

Android 新手,但我正在尝试从我的 SQLite Database 检索值,并根据存储的 ID 数量进行复选框的连续循环。复选框将仅输出主题名称。如果可能,它应该输出主题名称和单位。你能帮帮我吗?

     //get all subjects
    public List < Subject > getAllSubjects() {

      List < Subject > subjectList = new ArrayList < Subject > ();
      //select all query
      String selectQuery = " SELECT * FROM " + TABLE_SUBJECTS;
      SQLiteDatabase db = this.getWritableDatabase();
      Cursor cursor = db.rawQuery(selectQuery, null);

      //loop through all rows and add it to list
      if (cursor.moveToFirst()) {
        do {
          Subject subject = new Subject();
          subject.setID(Integer.parseInt(cursor.getString(0)));
          subject.setSubName(cursor.getString(1));
          subject.setUnits(cursor.getString(2));
          //ADD CONTACT TO LIST
          subjectList.add(subject);
        } while (cursor.moveToNext());
      }
      return subjectList;
    }

需要有关如何将 subjectList 值检索到 MainActivity 并将它们作为循环复选框和/或 ListView 输出的语法或代码示例。

【问题讨论】:

  • @jankigadhiya 对此感到抱歉,现在刚刚添加了我的代码。
  • 请清楚你的问题..我不明白你在做什么
  • @jankigadhiya 我正在尝试制作一个将 2 EditText 存储到一个数组中的应用程序。然后我实现了一个打开一个对话框的按钮,在对话框中是一个输入数组值的复选框列表视图。我可以选择值并提交,然后复选框中的所有选定值将显示在另一个屏幕中。这就是我想要做的。
  • 2个EditText放到一个数组中,那么你的listview中总是只有两个值..如果我没记错的话..!!
  • 是否可以以某种方式将 2 EditText 添加在一起,然后将它们存储为数组值并将它们作为一个复选框检索?你能给我举个例子吗?

标签: android arrays json checkbox android-edittext


【解决方案1】:

首先参考这个链接:Learn SQLITE

借助上面的教程创建两个名为Subjects & Teachers的表,表结构如下:

主题:ID 整数 PRIMARY KEY AUTOINCREAMENT、NAME 文本、UNITS 文本。

教师:ID 整数 PRIMARY KEY AUTOINCREAMENT、姓名文本、主题文本。

用于添加主题类

将有两个编辑文本第一个将具有子名称,第二个将具有单元数。在按钮单击时将这两个值放在单独的字符串中,并将其存储在 Subjects 表中。现在您的主题表将包含如下记录:

Id         Name       Units
1        Subject-1      4

这样继续输入主题。

用于添加教师和作业

您将拥有一个编辑文本,其中将输入教师的姓名。一个选择按钮,单击该按钮即可显示我们的主题表中的主题列表。

在对话框中点击Ok,您可以获得选定的主题。

提交按钮单击,将教师数据保存在表教师中。仅存储主题逗号分隔的ID。之后,仅通过其 id 引用一个特定的。

现在教师表将包含如下数据:

Id         Name       Subjects
1         daniel         1,2

教师名单

显示我们的教师表中的列表。

编辑 2:将列表设置为 listView

参考此链接:How to set list in ListView+CheckBoxes

我在这里总结一下这个概念:

步骤:1

您需要创建一个 list_item.xml 布局,其中将包含一个 TextView 和一个仅水平放置的复选框:

<?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="wrap_content"
    android:orientation="horizontal"
    android:padding="6dip" >

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text="CheckBox" />

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/checkBox1"
        android:layout_alignBottom="@+id/checkBox1"
        android:layout_toRightOf="@+id/checkBox1"
        android:text="TextView" />

</LinearLayout>

步骤:2

您需要创建一个适配器来处理您的列表,该列表将设置为 listView。

public class MyCustomAdapter extends ArrayAdapter<Subject> {

private ArrayList<Subject> subList;

public MyCustomAdapter(Context context, int textViewResourceId,
                       ArrayList<Subject> subList) {
    super(context, textViewResourceId, subList);
    this.subList = new ArrayList<Subject>();
    this.subList.addAll(subList);
}

private class ViewHolder {
    TextView name;
    CheckBox chk_box;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder = null;
    Log.v("ConvertView", String.valueOf(position));

    if (convertView == null) {
        LayoutInflater vi = (LayoutInflater) getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        convertView = vi.inflate(R.layout.list_item, null);

        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.name);
        holder.chk_box = (CheckBox) convertView.findViewById(R.id.checkBox1);
        convertView.setTag(holder);


    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    Subject subject = subList.get(position);
    holder.name.setText(subject.getSubName() + " - " + subject.getUnits());


    return convertView;

}

}

步骤 - 3

在 MainActivty 中为你的 ListView 设置这个适配器:

创建另一个xmlactivity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ListView
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

MainActivty.java

public class MainActivity extends Activity {

ListView mylist;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mylist = (ListView)findViewById(R.id.mylist);
    mylist.setAdapter(new MyCustomAdapter(MainActivty.this,subjectList,R.layout.list_item));
}

}

【讨论】:

  • 非常感谢,这澄清了我的很多问题。目前正在编写我的代码,希望它能按照我希望的方式进行锻炼。
  • 我很高兴它有帮助..快乐编码:)
  • 到目前为止一切顺利,如果你给我或链接我一个关于如何检索 SQLite 数据库表主题的示例代码 - 名称和/或单位以输出复选框上的值,是否有可能用户可以看到他/她正在选择什么?谢谢!我目前正在处理选择按钮。 imgur.com/CDsvR9a
  • 你改了问题..!!
  • 感谢您通过参考此链接接受答案以设置带有复选框的列表。 :mysamplecode.com/2012/07/android-listview-checkbox-example.html
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多