2017-03-10 3 views
1

I 3 Spinnereien habenAndroid Spinner von SQLite wirkt seltsam

1) Array Spinner

2) XML-Spinner und

3) SQLite Cursor Spinner

Als ich meinen dritten Spinner hinzugefügt , begann sich die Seite seltsam zu benehmen. Die Spinner 1 & 2 begannen im Spinner 3 Bereich zu erscheinen. Die Werte von Cursor sind in Spinner 3 vorhanden. Wenn ich irgendeinen Wert auswähle, funktioniert TOAST perfekt, aber der Wert wird nicht ausgewählt.

Layout-Datei: 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" /> 

Meine Java-Datei: 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

Jede Hilfe würde wirklich geschätzt werden.

+0

Bitte beachten Sie den Screenshot, der beigefügt ist –

+0

Ja, aber dein Screenshot hat 5 Spinner !! – Wizard

+0

Die 5 Spinner die du siehst ist eines meiner Probleme. Ich habe nur 3 Spinner definiert und auf dem Bildschirm, wie Sie im Layout sehen können, wiederholen sich die ersten 2 Spinner erneut. Es ist so funky. –

Antwort

0

das Problem ..Phew

Gefunden

aktualisiert die unterhalb der Linie

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

spinner_demo_main - Das ist meine Aktivitätsklasse - stattdessen sollten wir android.R.layout.simple_spinner_item

als geben werden unter

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

dieses Problem zu lösen, die drei Spinner in Java-Datei deklariert und initialisiert sie in Java-Datei

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; 

jetzt setOnItemSelectedListener hinzufügen und den mit dem Schalter Fall behandeln.

Es funktioniert gut für mich.

+0

Hallo Jagteshwar, Danke für die Antwort. Es funktioniert immer noch nicht für mich. Ich habe den 3. Spinner mit SimpleCursorAdaptor. Was ich unten initialisiert hatte. Beim zweiten Spinner verwende ich keinen Adapter. –

Verwandte Themen