android Spinner funktioniert nicht

Joob

Top Contributor
Mein Spinner zeigt zwar die WerteListe als DropDown an aber weder werden die Werte in den Textteil geschreiben noch wird der Listener OnSelectedItem funktioniert nicht mehr.

Ich bekomme keine Fehler, und habe keine Ahnung wo ich das anfassen soll !

Code:
public ArrayList<A2100_spin_groups_fields> a2100_spin_groups_array = new ArrayList<A2100_spin_groups_fields>();
    A2100_spin_groups_fields_adapter spinGroupAdapter;

    TextView TFIDMember;
    EditText TFMemberName;
    CheckBox CBMemberAktiv;
    Spinner SPMemberGroup;

    String MemberID;
    String MemberName;
    String MemberAktiv;
    String MemberGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        boolean varAktiv;

        super.onCreate(savedInstanceState);
        setContentView(R.layout.a2100_member_change);

        String method = "SPI";
        A2100_member_change.BGT2100 BGT2100 = new A2100_member_change.BGT2100(this);
        BGT2100.execute(method, MemberID, MemberName, MemberAktiv, MemberGroup);

        // Resources passed to adapter to get image
        Resources res = getResources();

        TFIDMember = (TextView) findViewById(R.id.A2100_IDMember);
        TFMemberName = (EditText) findViewById(R.id.A2100_MemberName);
        CBMemberAktiv = (CheckBox) findViewById(R.id.A2100_MemberAktiv);
        SPMemberGroup = (Spinner) findViewById(R.id.A2100_MemberGroup);

        // Create custom adapter object ( see below CustomAdapter.java )
        spinGroupAdapter = new A2100_spin_groups_fields_adapter(this, R.layout.a2100_spin_groups_rowlayout, a2100_spin_groups_array,res);

        // Set adapter to spinner
        SPMemberGroup.setAdapter(spinGroupAdapter);

        String[] TagToChange = getIntent().getExtras().getString("TagToChange").split(";");

        if(TagToChange[2].equals("0")) {varAktiv = false;} else {varAktiv = true;}

        if (TagToChange[0].equals("0"))
        {
            TFIDMember.setText(null);
            TFMemberName.setText(null);
            CBMemberAktiv.setChecked(false);
            SPMemberGroup.setSelection(0);
        } else
        {
            TFIDMember.setText(TagToChange[0]);
            TFMemberName.setText(TagToChange[1]);
            CBMemberAktiv.setChecked(varAktiv);
            SPMemberGroup.setSelection(0);
        }


        // Listener called when spinner item selected
       SPMemberGroup.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parentview, View v, int position, long id) {

                // Get selected row data to show on screen
                String GroupID    = ((TextView) v.findViewById(R.id.a2100spinGrp_GroupID)).getText().toString();
                String GroupName = ((TextView) v.findViewById(R.id.a2100spinGrp_GroupName)).getText().toString();

                String OutputMsg = "Selected Group : \n\n"+GroupID+"\n"+GroupName;
                System.out.println("Group : " + GroupID);
                Toast.makeText(getApplicationContext(),OutputMsg, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                System.out.println("bin dada ");
            }

        });


    }


upload_2016-11-28_23-43-36.png
 
Ich hatte gestern ein ähnliches Problem - mit einer SeekBar. Kein Listener funktionierte. Erst nachdem ich die App von meinem Testgerät gelöscht hatte, Clean und Build erneut gemacht habe, lief es dann. Ich glaube mein Android Studio ist leicht verbuggt.
Vielleicht hilft es Dir ja weiter.
 
@Override
public void onItemSelected(AdapterView<?> parentview, View v, int position, long id) {

// Get selected row data to show on screen
String GroupID = ((TextView) v.findViewById(R.id.a2100spinGrp_GroupID)).getText().toString();
String GroupName = ((TextView) v.findViewById(R.id.a2100spinGrp_GroupName)).getText().toString();

String OutputMsg = "Selected Group : \n\n"+GroupID+"\n"+GroupName;
System.out.println("Group : " + GroupID);
Toast.makeText(getApplicationContext(),OutputMsg, Toast.LENGTH_LONG).show();
}

Wenn sich die Auswahl des Spinners ändert, dann soll sich auch der Text in den beiden TextViews ändern, richtig?
Dann musst du das deinem Spinner / den TextViews auch mitteilen.
Momentan holst du dir nur die Werte aus den TextViews (die immer gleich sind) und speicherst sie ab.

Je nach dem wie dein Item des Spinners aufgebaut ist, kannst du sowas machen:
Java:
parent.getItemAtPosition(pos).getText(); // o. ä. Funktionen
 
an Buggy

Hallo,

Clean und Build habe ich schon gemacht.`Leider kein Erfolg.
Ich würde jetzt ein neues Projekt beginnen und die Daten aus dem alten importieren. Das Manifest im aktuellen Projekt sieht auch etwas komisch aus.
Gibts beim importieren was zu beachten ?
 
an Robat

aber was sagst du dazu das er auf den Listener nicht reagiert, dort habe ich mit System.out... geprüft. Der Listener wird nicht aktiviert.
Ansonsten Danke, das baue ich noch ein.
 
Wie komisch sieht denn dein Manifest aus?
Wenn Du alte Daten importierst, importierst Du zwangsläufig auch alle Fehler.
Versuche mal bitte, einen weiteren Spinner zu implementieren, und füge dem auch den Listener hinzu. Prüfe, obs bei dem funktioniert.
Weterhin kannst Du ja mal andere Listener implementieren. So schnell würde ich die Flinte nicht ins Korn werfen.

Edit:
Vielleicht bin ich blind, aber müsstest Du nicht
Code:
.setDropDownViewResource
auf Deinen Adapter anwenden?
 
Zuletzt bearbeitet:
Das ist mein erstes Projekt, und ich habe da mehrfach Namen geändert dabei scheint im Manifest einiges durcheinander gekommen zu sein. Also ich hab dann heute mal alles neu gemacht, jede Activit angelegt, jede Klasse angelegt, alles per Hand angepaßt, und nun ist das was im Manifest steht auch wieder nachvollziehbar.
Hier da du gefragt hast:
Neu und gut:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.traincounter.jupp.tc">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:name=".Z_GlobalVars"
        android:allowBackup="true"
        android:icon="@mipmap/yorokobi_symbol_white"
        android:label="Yorokobi Training"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".A0000_login">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".A0100_base" />
        <activity android:name=".A1000_training_groups" />
        <activity android:name=".A2000_members" />
        <activity android:name=".A2100_member_change" />
        <activity android:name=".A3000_trainers" />
        <activity android:name=".A3100_trainer_change" />
        <activity android:name=".A4000_groups" />
        <activity android:name=".A4100_group_change" />
        <activity android:name=".A5000_report"></activity>
    </application>

</manifest>
alt und komisch:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.traincounter.yorokobi.jupp.trainyorokobi"
  android:versionCode="1"
  android:versionName="1.0" >

  <uses-sdk
  android:minSdkVersion="18"
  android:targetSdkVersion="23" />

  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  <application
  android:name="com.traincounter.yorokobi.jupp.trainyorokobi.Z_GlobalVars"
  android:allowBackup="true"
  android:icon="@mipmap/yorokobi_symbol_white"
  android:label="Yorokobi Training"
  android:supportsRtl="true"
  android:theme="@style/AppTheme" >
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A0000_login" >
  <intent-filter>
  <action android:name="android.intent.action.MAIN" />

  <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  </activity>
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A1100_booking" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A2000_members" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A3000_trainers" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A4000_groups" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A5000yorokobi_report" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A0100_base" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A1000_training_groups" />
  <!--
ATTENTION: This was auto-generated to add Google Play services to your project for
  App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information.
  -->
  <meta-data
  android:name="com.google.android.gms.version"
  android:value="@integer/google_play_services_version" />

  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A2100_member_change" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A4100_group_change" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A3100_trainer_change" />
  <activity android:name="com.traincounter.yorokobi.jupp.trainyorokobi.A0000_spin_train_fields" />
  </application>

</manifest>

Allerdings liegt der Fehler in dem was Ihr sagt, das werde ich morgen Abend genau kontrollieren.
 
Ich komm da nicht weiter,
da sind aber noch andere Problem zu lösen, das mach ich erst mal und geh das ganze dann mit etwas Abstand neu an.
Hast Du eine Idee. Ist doch komisch das nur der Texteil nicht funktioniert. Ich habe schon Stunden daran kontroliert und im Beispiell im Internet läuft das.
Ich habe aber eine weiteres Spinner gebaut, das gleiche. Muss also definitiv ein Fehler in meinem Code sein.
 
Poste mal bitte alle relevanten Codeabschnitte.
-Also wie / wo du den Spinner initialisierst.
- Layout Datei(en)
- (Manifest ist eher irrelevant afaik)
- deinen Adapter!

Was mich ein wenig wundert ist, dass du eine ArrayList a2100_spin_groups_array deklarierst aber niemals Werte setzt. Wo genau werden denn die Werte zu der ArrayList hinzugefügt?

Off-Topic
Würde dir raten mehr mit LogCat zuarbeiten anstatt mit Syso 🙂

Gruß
 
Ok, ich hab es mal angefügt und gekürzt. Das Array kommt aus einem JSON das habe ich fertig eingegeben, da ich die Daten aus einer DB im Internet abfrage.
Ich muste ein paar Links mit http ... durch xyz ersetzen, die wollte er nicht mitnehmen.
Ich hoffe du hast eine IDEE.

Das Beispiel kommt aus dem Internet:
http://androidexample.com/Custom_Sp...le/index.php?view=article_discription&aid=84#

als Vid :

package com.traincounter.jupp.tc;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.i😵utputStream;
import java.i😵utputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;

public class A2100_member_change extends AppCompatActivity {

public ArrayList<A2100_spin_groups_fields> a2100_spin_groups_array = new ArrayList<A2100_spin_groups_fields>();
A2100_spin_groups_fields_adapter spinGroupAdapter;

TextView TFIDMember;
EditText TFMemberName;
CheckBox CBMemberAktiv;
Spinner SPMemberGroup;

String MemberID;
String MemberName;
String MemberAktiv;
String MemberGroup;

@Override
protected void onCreate(Bundle savedInstanceState) {

boolean varAktiv;

super.onCreate(savedInstanceState);
setContentView(R.layout.a2100_member_change);

String method = "SPI";
A2100_member_change.BGT2100 BGT2100 = new A2100_member_change.BGT2100(this);
BGT2100.execute(method, MemberID, MemberName, MemberAktiv, MemberGroup);

// Resources passed to adapter to get image
Resources res = getResources();

TFIDMember = (TextView) findViewById(R.id.A2100_IDMember);
TFMemberName = (EditText) findViewById(R.id.A2100_MemberName);
CBMemberAktiv = (CheckBox) findViewById(R.id.A2100_MemberAktiv);
SPMemberGroup = (Spinner) findViewById(R.id.A2100_MemberGroup);

// Create custom adapter object ( see below CustomAdapter.java )
spinGroupAdapter = new A2100_spin_groups_fields_adapter(A2100_member_change.this, R.layout.a2100_spin_groups_rowlayout, a2100_spin_groups_array,res);

// Set adapter to spinner
SPMemberGroup.setAdapter(spinGroupAdapter);


TFIDMember.setText(null);
TFMemberName.setText(null);
CBMemberAktiv.setChecked(false);
SPMemberGroup.setSelection(0);


SPMemberGroup.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
System.out.println("getouched");
System.out.println("WERT : " + SPMemberGroup.getPrompt());
return false;
}
});

// Listener called when spinner item selected
SPMemberGroup.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parentview, View v, int position, long id) {

// Get selected row data to show on screen
String GroupID = ((TextView) v.findViewById(R.id.a2100spinGrp_GroupID)).getText().toString();
String GroupName = ((TextView) v.findViewById(R.id.a2100spinGrp_GroupName)).getText().toString();

String OutputMsg = "Selected Group : \n\n"+GroupID+"\n"+GroupName;
System.out.println("Group : " + GroupID);
Toast.makeText(getApplicationContext(),OutputMsg, Toast.LENGTH_LONG).show();
}

@Override
public void onNothingSelected(AdapterView<?> parentView) {
System.out.println("bin dada ");
}

});


}

public void NewMember(View view)
{

}

public void SetMember(View view)
{

}

public void DelMember(View view)
{


}

public void delTag()
{


}






public class BGT2100 extends AsyncTask<String,String,String> {

Context ctx;

BGT2100(Context ctx)
{
this.ctx = ctx;
}



@Override
protected void onPreExecute()
{
super.onPreExecute();
}

@Override
protected String doInBackground(String... params)
{


String returnMessage = "";

if (method.equals("SAV"))
{


} else if (method.equals("SPI"))
{
result ="{\"allgroups\":[{\"id\":\"1\",\"trainGroup\":\"Erwachsene\"},{\"id\":\"2\",\"trainGroup\":\"Kinder\"}]}";
lstGroupsJsonObj = new JSONObject(result);
lstGroupsJsonArr = lstGroupsJsonObj.getJSONArray("allgroups");

int count = 0;
String idGroup = "";
String nameGroup = "";

while(count < lstGroupsJsonArr.length())
{
JSONObject lstTrainersIdx = lstGroupsJsonArr.getJSONObject(count);
A2100_spin_groups_fields spinBeanGroup = new A2100_spin_groups_fields();

idGroup = lstTrainersIdx.getString("id");
nameGroup = lstTrainersIdx.getString("trainGroup");

spinBeanGroup.setIdGroup(idGroup);
spinBeanGroup.setNameGroup(nameGroup);

a2100_spin_groups_array.add(spinBeanGroup);

count++;

}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}

returnMessage = "";

} else if (method.equals("DEL"))
{

}

//@Override
protected void onProgressUpdate(String values)
{
super.onProgressUpdate(values);
}

@Override
protected void onPostExecute(String result)
{
if(result != "") {
Toast.makeText(ctx,result,Toast.LENGTH_LONG).show();
}

}
}

}

Nun der Adapter
package com.traincounter.jupp.tc;

import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/ Adapter class extends with ArrayAdapter */
public class A2100_spin_groups_fields_adapter extends ArrayAdapter{

private Activity activity;
private ArrayList data;
public Resources res;
A2100_spin_groups_fields tempValues = null;
LayoutInflater inflater;

/***** CustomAdapter Constructor *******/
public A2100_spin_groups_fields_adapter(
A2100_member_change activitySpinner,
int textViewResourceId,
ArrayList objects,
Resources resLocal
)
{
super(activitySpinner, textViewResourceId, objects);

/********** Take passed values **********/
activity = activitySpinner;
data = objects;
res = resLocal;

/*********** Layout inflator to call external xml layout () **********************/
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override
public View getDropDownView(int position, View convertView,ViewGroup parent) {
System.out.println("dropdownview");
return getCustomView(position, convertView, parent);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("---------------------view");
return getCustomView(position, convertView, parent);
}

// This funtion called for each row ( Called data.size() times )
public View getCustomView(int position, View convertView, ViewGroup parent) {

/********** Inflate spinner_rows.xml file for each row ( Defined below ) ************/
View row = inflater.inflate(R.layout.a2100_spin_groups_rowlayout, parent, false);

/***** Get each Model object from Arraylist ********/
tempValues = null;
tempValues = (A2100_spin_groups_fields) data.get(position);

TextView GrpID = (TextView)row.findViewById(R.id.a2100spinGrp_GroupID);
TextView GrpName = (TextView)row.findViewById(R.id.a2100spinGrp_GroupName);

// Set values for spinner each row
GrpID.setText(tempValues.getIdGroup());
GrpName.setText(tempValues.getNameGroup());

return row;

}

}

XML der Activity

xmlns:tools="xyz"
android:id="@+id/activity_yorokobi_member_change"
android:layout_width="match_parent"
android:layout_height="match_parent"
android😛addingBottom="@dimen/activity_vertical_margin"
android😛addingLeft="@dimen/activity_horizontal_margin"
android😛addingRight="@dimen/activity_horizontal_margin"
android😛addingTop="@dimen/activity_vertical_margin"
tools:context="com.traincounter.jupp.tc.A2100_member_change">

<LinearLayout
android😱rientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:weightSum="1">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/A2100_IDMember" />

<TextView
android:text="Mitgliedsname:"
android:layout_width="match_parent"
android:id="@+id/A2100_tf_MemberName"
android:layout_height="wrap_content" />

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:id="@+id/A2100_MemberName"/>

<TextView
android:text="Gruppe:"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/A2100_tf_MemberGroup"/>

<Spinner
android:id="@+id/A2100_MemberGroup"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:drawSelectorOnTop = "true"/>

<CheckBox
android:text="aktives Mitglied"
android:layout_height="50dp"
android:layout_width="match_parent"
android:layout_gravity="center"
android:id="@+id/A2100_MemberAktiv"/>

<Button
android:text="Speichern"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/A2100_Save"
android:elevation="1dp"
android😱nClick="SetMember" />

<Button
android:text="Neu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/A2100_New"
android😱nClick="NewMember" />

<Button
android:text="Löschen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/A2100_DEL"
android😱nClick="DelMember" />

</LinearLayout>

Das RowLayout für den Spinner

xmlns:app="xyz/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="53dp"
android😱rientation="vertical"
android😛adding="3dp">

<TextView
android:text="TextView"
android:layout_width="0dp"
android:layout_height="50dp"
android:id="@+id/a2100spinGrp_GroupID"
android:textSize="20sp"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>

<TextView
android:layout_toRightOf="@id/a2100spinGrp_GroupID"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:id="@+id/a2100spinGrp_GroupName"
android:textSize="20sp"
android:layout_alignParentTop="true" />

Die Klasse für die ITEMS
package com.traincounter.jupp.tc;

/**
* Created by Jupp on 13.11.2016.
*/

public class A2100_spin_groups_fields {

private String idGroup;
private String nameGroup;

public String getNameGroup() {
return nameGroup;
}

public void setNameGroup(String nameGroup) {
this.nameGroup = nameGroup;
}

public String getIdGroup() {
return idGroup;
}

public void setIdGroup(String idGroup) {
this.idGroup = idGroup;
}

}
 
Hallo Joob, Code bitte immer in Code-Tags, sonst wird mir schwindelig. Der Arzt hat auch gesagt, ich soll nich 🙂
Gut, packs zusammen, und dann schauen wir mal drüber. Das wird schon, keine Panik!
 
Geht es auch mit weTransfer ist einfacher, benötige nur deine Mailadresse.
Die kannst du mir auch auf joob@freenet.de senden, dann sehen die nicht alle.
Ich habe das ganze Projekt gepackt, kannst du so laufen lassen.
 

Neue Themen


Zurück
Oben