2016-08-17 5 views
2

Ich habe ein Problem beim Festlegen der Spinner-Auswahl. Hier ist, was ich tue: Ich habe eine XML, in der ich eine Schaltfläche und ein Spinner, die mit Ländernamen gefüllt ist. Ich habe keinen Adapter verwendet, um den Spinner zu füllen. Stattdessen habe ich ein Array in der Zeichenkettendatei im Werteordner benannt, der viele Elemente als Ländernamen enthält. Wenn Sie nun ein Land auswählen, wählen Sie bitte England und klicken auf den Button. Beim Anklicken wird eine neue Aktivität gestartet, die ebenfalls einen Spinner hat, der auf die gleiche Weise mit der gleichen Liste gefüllt ist. Aber was ich will, ist, dass der zweite Aktivitätsspinner das ausgewählte Land anzeigen sollte, das in diesem Fall England als aktueller Gegenstand im Spinner war. Aber ich kann es nicht lösen. Hier Stück Code zu dem, was ichSet Spinner-Auswahl programmgesteuert

// Erste Aktivität XML

<Spinner 
    android:id="@+id/spinner1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:entries="@array/sehirler" 
    android:prompt="@string/sehirsec" /> 

// Zweite Aktivität XML

<Spinner 
    android:id="@+id/spinner2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:entries="@array/sehirler" 
    android:prompt="@string/sehirsec" /> 

// Firstactivity Code

spinner = (Spinner)findViewById(R.id.spinner1); 

button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     spinnerItem = spinner .getSelectedItem().toString(); 

     Intent intent = new Intent(firstactivity.this, secondactivty.class); 
     intent.putExtra("name", spinnerItem); 
     startActivity(intent); 
    } 
}); 

getan haben // zweiter Aktivitätscode

sehir = (Spinner)findViewById(R.id.spinner2); 
Intent intent = getIntent(); 
String name2 = intent.getExtras().getString("name"); 

sehir.setSelection(getIndex(sehir, name2)); 

private int getIndex(Spinner spinner, String myString) { 
    int index = 0; 

    for (int i=0;i<spinner.getCount();i++) { 
     if (spinner.getItemAtPosition(i).equals(myString)) { 
      index = i; 
     } 
    } 
     return index; 
    } 
} 
+0

ich habe Ihren Code versucht, und es funktioniert gut mit mir den ganzen Weg zu Lebkuchen. Wenn Sie die Methode "private int getIndex (Spinner Spinner etc ..." erstellen, erstellen Sie die Methode außerhalb von onCreate ... richtig? –

+0

Ja außerhalb onCreate. Funktionierte ich gut für Sie? –

+0

Ja, es funktionierte für mich, können Sie Ihren vollständigen Code, oder private Nachricht mich –

Antwort

1

Es scheint, dass Ihr Spinner2 nicht in der zweiten Aktivität ist, sondern in einem komplett anderen Layout. Überprüfen Sie, ob Sie einen Adapter haben. Wenn Sie über einen benutzerdefinierten Adapter verfügen, müssen Sie diesen Positionswert an den Konstruktor Ihres benutzerdefinierten Adapters übergeben.

In Ihrer zweiten Aktivität, den Positionswert an den Konstruktor CustomAdapter passieren:

Intent intent = getIntent(); 
position = intent.getIntExtra("position", 0); 

CustomAdapter jsonCustomAdapter = new CustomAdapter(SecondActivity.this, list, position); 

In Ihrem CustomAdapter, setzen es wie folgt auf:

public class CustomAdapter extends BaseAdapter { 

    private LayoutInflater inflater; 
    private List<ItemObject> list; 
    private int spinnerPosition; 

    public CustomAdapter(Context context, List<ItemObject> list, int position) { 
     inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.list = list; 
     spinnerPosition = position; 
    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

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

     ViewHolder listViewHolder; 
     if(convertView == null){ 
      listViewHolder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.list, parent, false); 
      listViewHolder.spinner = (Spinner)convertView.findViewById(R.id.spinner2); 
      convertView.setTag(listViewHolder); 
     } else { 
      listViewHolder = (ViewHolder)convertView.getTag(); 
     } 

     listViewHolder.spinner.setSelection(spinnerPosition); 
     return convertView; 
    } 

    static class ViewHolder{ 
     Spinner spinner; 
    } 
} 
+0

Ist das nicht die gleiche Sache? Ich fand Index über eine Funktion außerhalb onCreate, die Sie innerhalb –

+0

getan haben, habe ich das Problem herausgefunden, Ihre Spinner2 ist nicht in der zweiten Aktivität, sondern in einem völlig anderen Layout in Ihrem benutzerdefinierten Adapter, daher müssen Sie die Position an den Konstruktor Ihres benutzerdefinierten Adapters übergeben. Ich werde meine Antwort für Sie bearbeiten –

+0

Vielen Dank Bitte bewerten Sie meine Frage auch –

Verwandte Themen