【问题标题】:Android Spinner from SQLite is acting weirdSQLite 的 Android Spinner 表现得很奇怪
【发布时间】:2017-07-31 10:39:31
【问题描述】:

我有 3 个旋转器

1) 数组微调器

2) XML Spinner 和

3) SQLite 光标微调器

当我添加第三个 Spinner 时,页面开始表现得很奇怪。微调器 1 和 2 开始出现在微调器 3 区域。来自 Cursor 的值存在于 Spinner 3 中。当我选择任何值时,TOAST 可以完美运行,但不会选择该值。

布局文件:spinner_demo_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"
android:orientation="vertical"
tools:context="com.training.sqlitelistviewdemo.SpinnerDemo">

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Select Country"
    android:textColor="#000000"
    android:textSize="20sp" />

<Spinner
    android:id="@+id/spCountries"
    style="@android:style/Widget.Holo.Light.Spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/country_arrays"
    android:prompt="@string/country_prompt"
    android:spinnerMode="dialog">

</Spinner>

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Select Business Type"
    android:textColor="#000000"
    android:textSize="20sp" />

<Spinner
    android:id="@+id/spBussinessType"
    style="@style/Base.Widget.AppCompat.Spinner.Underlined"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/business_prompt">

</Spinner>


<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Select Shop Name"
    android:textColor="#000000"
    android:textSize="20sp" />

<Spinner
    android:id="@+id/sp_Shops"
    style="@android:style/Widget.Holo.Light.Spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/select_shops"
    android:spinnerMode="dialog">
</Spinner>


<Button
    android:id="@+id/submit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="10dp"
    android:text="Submit"
    android:textSize="15sp" />

我的 Java 文件:SpinnerDemo.java

package com.training.sqlitelistviewdemo;

import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class SpinnerDemo extends AppCompatActivity implements View.OnClickListener {

    // uicontrols
    Spinner spCountries;
    Spinner spBusinessType;
    Button btnsubmit;

    //class members
    String businessType[] = { "Automobile", "Food", "Computers", "Education", "Personal", "Travel" };
    ArrayAdapter<String> adapterBusinessType;

    // local members
    String sbusinesstype,scountry;

    // SQLite Parameters Start

    private DatabaseManager dbManager;
    private TextView tv_Text;
    private Spinner sp;

    private SimpleCursorAdapter adapter;

    // final String[] from = new String[] { DatabaseHelper._ID, DatabaseHelper.SHOPNAME, DatabaseHelper.SHOPADDRESS };
    final String[] from = new String[] {DatabaseHelper.SHOPNAME};

    //final int[] to = new int[] { R.id.id, R.id.shopname, R.id.shopaddress };
    final int[] to = new int[] {android.R.id.text1};

    // SQLite Parameters End


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spinner_demo_main);
        //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        //setSupportActionBar(toolbar);

        spCountries = (Spinner) findViewById(R.id.spCountries);
        spBusinessType = (Spinner) findViewById(R.id.spBussinessType);

        btnsubmit=(Button)findViewById(R.id.submit);
        btnsubmit.setOnClickListener(this);

        // Initialize and set Adapter
        adapterBusinessType = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, businessType);
        adapterBusinessType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spBusinessType.setAdapter(adapterBusinessType);

        // Country Item Selected Listener
        spCountries.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapter, View v, int position, long id) {
                // On selecting a spinner item
                scountry = adapter.getItemAtPosition(position).toString();

                // Showing selected spinner item
                Toast.makeText(getApplicationContext(),
                        "Selected Country : " + scountry, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
        // Business Type Item Selected Listener
        spBusinessType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapter, View v,
                                       int position, long id) {
                // On selecting a spinner item
                sbusinesstype = adapter.getItemAtPosition(position).toString();

                // Showing selected spinner item
                Toast.makeText(getApplicationContext(),
                        "Bussiness Type : " + sbusinesstype, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
// SQLite Spinner Code Starts

        dbManager = new DatabaseManager(this);
        dbManager.open();
        Cursor cursor = dbManager.fetch_Shop();
        sp = (Spinner) findViewById(R.id.sp_Shops);
        // sp.setEmptyView(findViewById(R.id.empty));

        adapter = new SimpleCursorAdapter(this, R.layout.spinner_demo_main, cursor, from, to, 0);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adapter);
        //sp.setSelection(1);
        //adapter.notifyDataSetChanged();

        sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
                sp.setSelection(position);

                Cursor shopCur=(Cursor)sp.getSelectedItem();
                String shopNamecol=shopCur.getString(shopCur.getColumnIndex(DatabaseHelper.SHOPNAME));
                String Rowid = shopCur.getString(shopCur.getColumnIndex(DatabaseHelper._ID));
                Toast.makeText(getApplicationContext(), "You Selected - " + shopNamecol + " - " + Rowid + " " + position, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });



// SQLite Spinner Code Ends
    }

    @Override
    public void onClick(View v) {
        Toast.makeText(getApplicationContext(), "You have selected " + scountry + " and " + sbusinesstype,Toast.LENGTH_LONG).show();
    }

}

Spinner Screen Shot

任何帮助将不胜感激。

【问题讨论】:

  • 请看附件截图
  • 是的,但你的截图有 5 个微调器!!
  • 你看到的 5 个 Spinners 是我的问题之一。我只定义了 3 个微调器,正如您在布局中看到的那样,在屏幕上,前 2 个微调器再次重复。太时髦了。

标签: java android xml sqlite android-layout


【解决方案1】:

为了解决这个问题,在 java 文件中声明三个微调器并在 java 文件中初始化它们

Spinner spCountries;
Spinner spBusinessType;
Spinner shops;

//class members
String businessType[] = { "Automobile", "Food", "Computers", "Education", "Personal", "Travel" };
ArrayAdapter<String> adapterBusinessType;
ArrayAdapter<String> adapterspCountriesType;
ArrayAdapter<String> adaptershopsType;

现在添加 setOnItemSelectedListener 并处理 using switch case 。

它对我来说很好用。

【讨论】:

  • 您好 Jagteshwar,感谢您的回复。它仍然对我不起作用。我有第三个使用 SimpleCursorAdaptor 的微调器。我在下面初始化了。第二个微调器我没有使用适配器。
【解决方案2】:

找到问题了..Phew

更新了下面一行

adapter = new SimpleCursorAdapter(this, R.layout.spinner_demo_main, cursor, from, to, 0);

spinner_demo_main - 这是我的 Activity 类 - 我们应该提供 android.R.layout.simple_spinner_item

如下

adapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursor, from, to, 0);

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多