【问题标题】:Custom spinner where data comes from SQLite database with multiple lines?数据来自多行 SQLite 数据库的自定义微调器?
【发布时间】:2014-01-20 04:11:44
【问题描述】:

我正在寻找有关如何让微调器显示多个项目的帮助,但是,从 SQLite 数据库获取数据。

我已经能够从数据库中获取数据并将其放入带有一个项目的微调器中。为此,我将数据库中的一列拉入 ArrayList,然后将 ArrayList 添加到 Array 适配器,如下所示,这是我当前的代码:

spinner = (Spinner) view.findViewById(R.id.Spinner);
ArrayAdapter<String> catAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, ArrayListNames);
catAdapter.setDropDownViewResource(R.layout.spinner_item);
spinner.setAdapter(catAdapter);

然而,我需要的是微调器为每行显示两个项目。现在我正在从数据库中提取一个名为“名称”的列。我希望能够同时显示“年龄”列。

所以微调器看起来像这样:

Item 1: John
        33

Item 2: Dave
        24

然后用户可以从微调器中选择 John 或 Dave。我只是希望能够在每一行中显示不止一点的信息。对我来说,问题是它从数据库进入 ArrayList 然后进入微调器的适配器。

有谁知道我怎样才能为 Age 多出一行?

非常感谢您的帮助,谢谢!

编辑:我现在如何获取数据。

ArrayList<String> ArrayListNames = new ArrayList<String>();

    Cursor c = db.rawQuery("SELECT * FROM table_one", null);
    if (c.moveToFirst()) {
        do {
            ArrayListNames.add(c.getString(c.getColumnIndex("name")));
            ArrayListNames.add(c.getString(c.getColumnIndex("age")));
        }
        while (c.moveToNext());
    }
    c.close();

【问题讨论】:

  • 所以你想在你的微调器中显示姓名+年龄?
  • 是的。每个项目的名称 + 年龄。
  • 有什么问题?您可以从ArrayListNames 的列表项 0 到末尾进行循环,并在每一步将年龄与名称连接起来。
  • 如果我理解正确,这就是我现在正在做的事情。但是每个名字和年龄都在不同的项目中。所以微调器让用户从姓名或年龄中进行选择。我将更新我的问题,向您展示如何使用光标将数据放入 ArrayList。
  • 我仍然很困惑,John 33 或类似的工作是否适合您,或者您希望 John 和 33 在两条不同的线路上但被视为一个项目?

标签: android sqlite arraylist spinner


【解决方案1】:

我已在chat room 中发布了代码和说明。以下代码由custom spinner in android修改供个人使用

import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

import java.util.ArrayList;

public class customSpinner extends Activity
{
ArrayList<String> name = new ArrayList<String>();
ArrayList<String> age = new ArrayList<String>();

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.customspinner);
for (int i =0 ;i<=2;i++){
name.add(""+i);
age.add(""+i);
}
Spinner mySpinner = (Spinner)findViewById(R.id.spinner);
mySpinner.setAdapter(new MyAdapter(this, R.layout.spinnerrow, name));
}

public class MyAdapter extends ArrayAdapter<String>
{

public MyAdapter(Context context, int textViewResourceId, ArrayList<String> objects)
{
super(context, textViewResourceId, objects);
}

@Override
public View getDropDownView(int position, View convertView,ViewGroup parent)
{
return getCustomView(position, convertView, parent);
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
return getCustomView(position, convertView, parent);
}

public View getCustomView(int position, View convertView, ViewGroup parent)
{

LayoutInflater inflater=getLayoutInflater();
View row=inflater.inflate(R.layout.spinnerrow, parent, false);
TextView label=(TextView)row.findViewById(R.id.company);
label.setText(name.get(position));

TextView sub=(TextView)row.findViewById(R.id.sub);
sub.setText(age.get(position));


return row;
}
}
}

您可以使用cursors 从database 获取值,或者手动给它,而不是使用for 循环将项目添加到ArrayList。根据自己的需要修改即可。

【讨论】:

    【解决方案2】:

    我自己设法做到了这是一个应用程序。变化:

    catAdapter.setDropDownViewResource(R.layout.spinner_item);
    spinner.setAdapter(catAdapter);
    

    到

    catAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
    spinner.setAdapter(catAdapter);
    

    并在布局文件夹中创建一个名为 multiline_spinner_dropdown_item.xml 的 xml 文件,其中包含以下内容

    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:ellipsize="none"
    android:singleLine="false"
    android:textSize="15sp" />
    

    编辑:就像下面的代码

    Spinner spinner = (Spinner)findViewById(R.id.spinner);
        ArrayAdapter<String> catAdapter= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, android.R.id.text1);
        catAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);
        spinner.setAdapter(catAdapter);
        catAdapter.add("value");
        catAdapter.add("v \n alue");
        catAdapter.add("value");
        catAdapter.add("value");
        catAdapter.notifyDataSetChanged();
    

    数组中的第二个条目将在一行有“v”,在第二行有“alu”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 2019-09-22
      相关资源
      最近更新 更多