android Spinner funktioniert nicht

  • Antworten:10
Josef Oberstadt
  • Forum-Beiträge: 7

01.12.2016, 23:33:50 via Website

Ich versuche nun seit mehr als einer Woche den Fehler im Spinner zu finden und komm nicht weiter. Das ist mein erstes Projekt. Ich mach das immer erst mal um ein Gefühl für die Umgebung zu bekommen. Also habe ich im Vids geschaut und versucht daraus eine Lösung zu entwickeln.

Hier mein Problem.
Ich habe einen Spinner mit Custom Adapter nachgebaut. Leider bekomme ich keine Anzeige im Textteil. Der DropDown funktioniert, speichert aber keine Werte. Ich weiß echt nicht mehr wo ich kontrollieren soll.

Also jetzt einmal die Activity und der Adapter:

enter code herepackage 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.io.OutputStream;
import java.io.OutputStreamWriter;
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);

    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);
    }

    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)
{
    TFIDMember.setText("");
    TFMemberName.setText("");
    CBMemberAktiv.setChecked(false);
    SPMemberGroup.setSelection(0);
}

public void SetMember(View view)
{
    String varCheckBox;
    if (CBMemberAktiv.isChecked()) {varCheckBox = "1";} else {varCheckBox = "0";}

    MemberID = TFIDMember.getText().toString();
    MemberName = TFMemberName.getText().toString();
    MemberAktiv = varCheckBox;
    MemberGroup = SPMemberGroup.getPrompt().toString();

    if (MemberName.trim().length() < 6 ) {
        Toast.makeText(getApplicationContext(), "Mitgliedsnamen min.6 Zeichen", Toast.LENGTH_LONG).show();

    } if (MemberGroup == "0" ){
    Toast.makeText(getApplicationContext(), "Es fehlt die Gruppe", Toast.LENGTH_LONG).show();

} else {
    String method = "SAV";
    A2100_member_change.BGT2100 bgt2100 = new A2100_member_change.BGT2100(this);
    bgt2100.execute(method, MemberID, MemberName, MemberAktiv, MemberGroup);
    finish();
}

}

public void DelMember(View view)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("Löschen ?");
    builder.setIcon(R.drawable.ic_del);
    builder.setMessage("Soll das Mitglied gelöscht werden ?");

    builder.setNegativeButton("Nein", null) ;

    builder.setPositiveButton("Ja", new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
            delTag();
        }
    });

    Dialog dialog = builder.create();
    dialog.show();

}

public void delTag()
{
    MemberID = TFIDMember.getText().toString();
    if (MemberID.trim().equals("") || MemberID.trim().equals("0")) {

        Toast.makeText(this,"Löschen nicht möglich ! GID= 0",Toast.LENGTH_LONG).show();
    } else {

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

}


public String delSpezialChars (String string)
{
    string = string.replace(";",",");

    string = string.replace("ä","ae");
    string = string.replace("Ä","Ae");
    string = string.replace("ö","oe");
    string = string.replace("Ö","Oe");
    string = string.replace("ü","ue");
    string = string.replace("Ü","Ue");

    return string;
}



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

    Context ctx;

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

    private Z_GlobalVars zGlobalVars = (Z_GlobalVars) getApplicationContext();
    String actURL = zGlobalVars.getURL();

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

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

        String method = params[0];
        String url_new = actURL + "A2100_newmember.php";
        String url_sav = actURL + "A2100_savemember.php";
        String url_del = actURL + "A2100_delmember.php";
        String url_spi = actURL + "A4000_getgroups.php";

        String MemberID = params[1];
        String MemberName = params[2];
        String MemberAktiv = params[3];
        String MemberGroup = params[4];

        String url_aktiv = "";
        String returnMessage = "";

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

            if (MemberID.equals(""))                                                               // Prüfen ob neuer DS oder aktualisieren DS
            {   url_aktiv = url_new; } else
            {   url_aktiv = url_sav; }

            try {

                if (MemberName.trim().equals(""))
                {
                    returnMessage = "Ohne Mitgliedsname wird nicht gespeichert...";
                } else {

                    MemberName = delSpezialChars(MemberName);

                    URL url = new URL(url_aktiv);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.setRequestMethod("POST");
                    httpURLConnection.setDoOutput(true);
                    httpURLConnection.setDoInput(true);

                    OutputStream OS = httpURLConnection.getOutputStream();
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8"));
                    String data = URLEncoder.encode("ID", "UTF-8") + "=" + URLEncoder.encode(MemberID, "UTF-8") + "&" +
                            URLEncoder.encode("membername", "UTF-8") + "=" + URLEncoder.encode((MemberName.replace(";", ",")), "UTF-8") + "&" +
                            URLEncoder.encode("akitv", "UTF-8") + "=" + URLEncoder.encode(MemberAktiv, "UTF-8") + "&" +
                            URLEncoder.encode("membergroup", "UTF-8") + "=" + URLEncoder.encode(MemberGroup, "UTF-8");

                    bw.write(data);
                    bw.flush();
                    bw.close();
                    OS.close();

                    InputStream IS = httpURLConnection.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(IS, "iso-8859-1"));

                    String response = "";
                    String line = "";

                    while ((line = br.readLine()) != null) {
                        response += line;
                    }

                    br.close();
                    IS.close();

                    httpURLConnection.disconnect();
                    System.out.println("Bin da " + response);
                    returnMessage = response;
                }

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

        } else if (method.equals("SPI"))
        {
            try {

                String result = "";
                String lstGroups_JsonString;
                JSONObject lstGroupsJsonObj;
                JSONArray lstGroupsJsonArr;


                URL url = new URL(url_spi);
                HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setDoInput(true);

                OutputStream OS = httpURLConnection.getOutputStream();
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8"));
                String data = URLEncoder.encode("FIELDS", "UTF-8") + "=" + URLEncoder.encode("*", "UTF-8");

                bw.write(data);
                bw.flush();
                bw.close();
                OS.close();

                InputStream IS = httpURLConnection.getInputStream();
                BufferedReader BR = new BufferedReader(new InputStreamReader(IS));
                StringBuilder SB = new StringBuilder();

                while((lstGroups_JsonString = BR.readLine()) != null)
                {
                    SB.append(lstGroups_JsonString + "/n");

                }

                BR.close();
                IS.close();
                httpURLConnection.disconnect();

                result =  SB.toString().trim();

                if(result.contains("[]}")) {result ="{\"allgroups\":[{\"id\":\"0\",\"trainGroup\":\"0 Gruppen gespeichert\"}]}";}

                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"))
        {
            try {

                URL url = new URL(url_del);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);

                OutputStream OS = httpURLConnection.getOutputStream();
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(OS,"UTF-8"));
                String data = URLEncoder.encode("ID","UTF-8") + "=" + URLEncoder.encode(MemberID,"UTF-8");

                bw.write(data);
                bw.flush();
                bw.close();
                OS.close();

                InputStream IS = httpURLConnection.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(IS,"iso-8859-1"));

                String response = "";
                String line = "";

                while ((line = br.readLine()) != null)
                {
                    response+= line;
                }

                br.close();
                IS.close();

                httpURLConnection.disconnect();
                returnMessage = response;

            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return returnMessage;
    }

    //@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;
}

}

Hier eine Ansicht:
image

image

Antworten
swa00
  • Forum-Beiträge: 3.704

01.12.2016, 23:45:54 via Website

Hallo Josef,

willkommen im Forum,

Lieben Dank für deinen Code , aber nimm es mir nicht übel :

Für eine Forenhilfe ein wenig zu umfangreich, um jetzt an deinem Kernpunkt zu helfen.

Brich deinen Code bitte auf das wesentliche herunter , damit man genau sehen kann ,was du
UI mässig tust. Threads / JSON etc erst mal aussen vor .....

Tip meinerseits : Immer erst mal selbst ein TestProjekt bauen, dann alles drumrum ...

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Josef Oberstadt
  • Forum-Beiträge: 7

02.12.2016, 08:30:26 via Website

Hallo,

wie ich beschrieben habe, es geht nur um den Textteil des Spinner. (Dieser zeigt keine Daten an, der Spinner enthält auch keine Daten, deshalb funktioniert auch der Listener SetOnItemSel.. nicht.
Deshalb habe ich den anderen Listener eingebaut um den Inhalt zu inspezieren und die System.out.. um die Verwendung innerhalb des Adapters zu sehen. Mir fällt nichts auf. Bei den Beispielen aus dem Internet läuft das einfach. Der Spinner zeigt speichert nach klicken auf das Item die Daten im TextTeil, bzw. zeigt zu Beginn das erste Item an.

Adapter muss das Problem sein, und da ggf. getView aber was mach ich falsch, wenn der Adapter seine Objekte erzeugt wie man am Dropdown sieht.

Wie man sieht ist das JSON nicht relevant (nur der Vollständigkeit, da denkt jeder anders drüber, der eine will alles sehen der andere nur fokusiert) da der Dropdown die Daten anzeigt, deshalb die Bilder. Also das Array ist mit korrekten Daten gefüllt. Das RowLayout habe ich auch variiert und es funktioniert im DropDown.

Es muss am Adapter oder der Def. des Spinners liegen. Ich bekomme aber keine Fehlermeldungen und habe Stunden über Stunden versucht die Ursache zu finden. Meine Basis war ein Codebeispiel im Internet, dann habe ich ein Vid gefunden was genau darauf aufbaut, ich muss den Fehler immer übersehen.

androidexample.com/Custom_Spinner_With_Image_And_Text_-_Android_Example/index.php?view=article_discription&aid=84

Das hat einer im Vid 1:1 nachgebaut und läßt es laufen. Da funktioniert es !

Antworten
swa00
  • Forum-Beiträge: 3.704

02.12.2016, 10:45:44 via Website

Hallo Josef,

was für ein Problem vorliegt, hast du ausreichend oben beschrieben.

Auf Anhieb kann man auch nichts Gravierendes feststellen - es kann also durchaus sein , dass
dein Fehler im Zusammenhang geschieht.

Da wir grundsätzlich ( oder die meisten hier ) nicht nach Videos arbeiten und wir auch nicht "so eben" mal in einem Forum als Hilfe komplett in die Thematik des Videos und den Hintergrund arbeiten können (Freizeithilfe)
habe ich dich gebeten, das Ganze auf das Wesentliche zu reduzieren.
(Auch liegt uns nicht das XML - Layout vor - daran könnte es ja auch liegen)

Du suchst ja schon nach eigenen Angaben über Stunden - Gib uns die Chance , dass in den paar Minuten
auch zu Bewerkstelligen, denn du fragst uns ja uns um Hilfe.

Wenn wir so ein Problem haben , dann machen wir uns - wie oben schon beschrieben - ein eigenes Projekt
NUR für das Problem was vorliegt.

Was spricht also dagegen, dass du dir erst mal ein eigenes Projekt nur mit deinem Spinner-Adapter baust und
schaust was dann passiert - das ist doch in ein paar Minuten gemacht.

— geändert am 02.12.2016, 10:55:54

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Josef Oberstadt
  • Forum-Beiträge: 7

02.12.2016, 13:12:02 via Website

Hallo Stefan,

kein Problem kann ich machen, aber dann kommt man doch in die Problematik mit dem Array.
Bitte versteh das nicht falsch, ich würde nur gerne die benötigten Angaben richtig versenden.

Also stelle ich zusammen:
Activity ohne JSON, Speichern usw.
Adapter
Klassen
Layouts : Activity, Rowlayout,
und das ganze in diese TextBox

Wär das so vollständig ?

Antworten
Josef Oberstadt
  • Forum-Beiträge: 7

02.12.2016, 21:55:20 via Website

Hallo Stefan,

Ich habe es gekürzt und alles reingepackt sollte so funktioniern, das JSON habe ich nachgebaut.
Sollte eigentlich so im Projekt laufen und das Problem sichtbar sein.
Bitte schau in den Layouts, habe Links ich gegen xyz ersetzt.
Hattest du dir das so vorgestellt ?

Also hier die Activity (abgespeckt)

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.io.OutputStream;
import java.io.OutputStreamWriter;
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.traincounter.jupp.tc.A2100_member_change">

<LinearLayout
    android:orientation="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:onClick="SetMember" />

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

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

</LinearLayout>

Das RowLayout für den Spinner

xmlns:app="xyz/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="53dp"
android:orientation="vertical"
android:padding="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;
}

}

Antworten
Josef Oberstadt
  • Forum-Beiträge: 7

03.12.2016, 17:22:47 via Website

Hallo Stefan,

ich habe den Grund meines Problem entdeckt. Ich habe es versäumt die Eintragungen in der
res/values/strings.xml zu machen.

Kannst du mir sagen wofür die da ist und wie ich dort die korrekten Eintragungen mache.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.12.2016, 17:34:04 via App

Die Strings XML ist als string Ressource gedacht damit lassen sich auch Übersetzungen machen.

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten
swa00
  • Forum-Beiträge: 3.704

03.12.2016, 17:37:36 via Website

Kannst du mir sagen wofür die da ist und wie ich dort die korrekten Eintragungen mache.

Hallo Josef,
sorry, dass ich nicht direkt auf deinen letzten Post antworten konnte , ich war unterwegs.

Erst mal herzlichen Glückwunsch für deinen Fortschritt.

In den Strings.xml verfasst man z.b. Strings , die in der App benutzt werden ( Layoutbezeichnungen z.b.)
Jeder String hat dann eine eindeutige ID

Beispiel :

TextView mTitle2 = (TextView) findViewById(R.id.title2);
    mTitle2.setText(getResources().getString(R.string.mytitle2));

und in der strings.xml

>string name="mytitle2">Bitte warten ....</ string >

Das hat den Vorteil , dass man multilinguale Versionen unterstützen kann .
Dazu gehst du hin , machst deinen res-Folder auf -> values -> Rechte Maustatse auf strings.xml -> "Open Translation Editor"

Android erkennt automatisch beim User die installierte Sprachenversion und nimmt die von dir gegebene Version.
Default ist dann das, was sich in der string.xml befindet - für deutsch wird mit dem Translation-Editor eine string-de.xml angelegt.

— geändert am 03.12.2016, 19:22:33

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Josef Oberstadt
  • Forum-Beiträge: 7

03.12.2016, 22:28:37 via Website

Hallo Stefan,

schönen Dank für deine Antwort,
aber ich glaube doch nicht damit die Lösung gefunden zu haben. Ich muss noch was probieren.

Antworten
Josef Oberstadt
  • Forum-Beiträge: 7

11.12.2016, 20:21:27 via Website

Hallo Stefan,

ich habe jetzt die relevanten Teile in ein neues Projekt verlagert würdest du dir das anschauen ?
Ich habe es in der DropBox und könnte dir den Link schicken.

Bin aber heute auf ein komisches Problem gestoßen:
habe eine String Variable
wenn ich die mit System.out.. anzeige ist alles OK
Meine if Schleife reagierte aber nicht,
also habe ich es im Debugger laufen lassen,
dort zeige er die Variable mit \t\t an,
wenn ich das in der If Schleife eingebe funktioniert es auch.
Weißt Du was das ist ?

Antworten