# ListView und Arrays...



## wer112 (29. Jul 2021)

Ich habe eine Frage. Ich möchte eine Liste anzeigen lassen mit mehreren Zeilen, sowie ein Image. Ich habe keine Ahnung, wie es mit Listen und Arrays funktioniert. Ich weiß nur, das man Strings Arrays anzeigen lassen kann( String name[] = {}).  Das Problem ist, das ich den Input nicht festlegen möchte, sondern über ein Alert Dialog eintragen lassen möchte. Das funktioniert mit dem Dialog(Toast Ausgabe.) Ich habe sehr viele Youtube Videos probiert und keins hat funktioniert, weil immer wieder was nicht Exestiert(Befehle...), deswegen konnte ich kein Video finden. Es gibt auch keine Videos wo man das lernen kann. Und die Leute haben immer die Arrays festgelegt.
ich möchte Sie aus dem Internet laden bzw. aus ShaPre.

Meine Fragen:

- Wie speichert man Arrays Strings ab(ShaPre & Firebase)?
- Wie lädt man Arrays Strings (ShaPre & Firebase)?
- Wie kann ich Bilder als Arrays in die richtigen Reihenfolge laden
- Wie kann ich mit den importierten Arrays eine mehrzeilige ListView erstellen

Es wäre schön, wenn ihr gute Youtube Videos(am besten Deutsch) zu diesen Themen findet, die zur meiner Aufgabe passen, dmit ich das erlernen kann. Leider finde ich keins, da Befehle nicht mehr existieren.


----------



## Jw456 (29. Jul 2021)

- Wie speichert man Arrays Strings ab(ShaPre & Firebase)?

Für den Anfang würde och erstmal mit ShaPref machen.
Das ist dann nur lokal nicht im Netz. 
Lokal wäre auch eine DB SQlite ist ja schon in Android vorhanden.
Firebase und auch SQlite setzt natürlich einiges von DB wissen voraus .

für ShaPref villeicht ArrayList benutzen








						ArrayList mit Objekten in SharedPreferences speichern
					

Android praktisches Wissen: Eine ArrayList mit Objekten in SharedPreferences speichern und wieder auslesen unter Verwendung von Gson.




					kelut.at
				








- Wie kann ich Bilder als Arrays in die richtigen Reihenfolge laden
 Dazu wäre einfacher das array in eine Liste oder collection zupacken und dort zusortieren.
Der ArrayAdapter sollte auch mit einer ArrayList umgehen können.

-    Wie kann ich mit den importierten Arrays eine mehrzeilige ListView erstellen

Suche nach Custom ListView


----------



## Jw456 (29. Jul 2021)

ArrayList sortieren - javatricks.de
					

Das Sortieren einer `ArrayList` bzw. einer `List` im Allgemeinen ist in Java recht einfach mit der Util-Methode `Collections.sort()` möglich.



					javatricks.de
				









						Array in Liste umwandeln - javatricks.de
					

Oft ist es notwendig ein Array in eine Liste umzuwandeln weil z.B. eine Methode eine Liste erwartet oder man aus anderen Gründen lieber mit einer Liste als mit einem Array arbeitet.



					javatricks.de
				









						Android Custom ListView - javatpoint
					

Android Custom ListView Example with examples of Activity and Intent, Fragments, Menu, Service, alarm manager, storage, sqlite, xml, json, multimedia, speech, web service, telephony, animation and graphics



					www.javatpoint.com


----------



## wer112 (30. Jul 2021)

Jw456 hat gesagt.:


> - Wie speichert man Arrays Strings ab(ShaPre & Firebase)?
> 
> Für den Anfang würde och erstmal mit ShaPref machen.
> Das ist dann nur lokal nicht im Netz.


Netz muss am Ende ja sein, da der Nutzer die Daten wieder haben möchte.
Jetzt zum Test Zwecken, kann ich ja offline machen 


Jw456 hat gesagt.:


> Lokal wäre auch eine DB SQlite ist ja schon in Android vorhanden.
> Firebase und auch SQlite setzt natürlich einiges von DB wissen voraus .
> 
> für ShaPref villeicht ArrayList benutzen
> ...



Ich habe mir das Angeschauen und das auch gemacht, leider bin ich zu blös  , weil ich habe in /data/data/shaPre in die dort angelegte Datei nachgesehen und die 2 Werte werden nur überschrieben und bildet sich kein String. 

Frage, wie füge ich eine Array String ein Wert hinzu?


----------



## kneitzel (30. Jul 2021)

wer112 hat gesagt.:


> weil ich habe in /data/data/shaPre in die dort angelegte Datei nachgesehen und die 2 Werte werden nur überschrieben und bildet sich kein String.


Bitte immer genau sagen:
- Was hast Du exakt gemacht?
- Was hast Du exakt vorgefunden?

In dem Link wird ja die ArrayList in einen JSON String verwandelt und dann wird es als key / Value Paar gespeichert.

Somit wirst Du eben genau diesen einen Key sehen.Und der wird immer überschrieben.

Wert Hinzufügen wäre dann immer:
- JSON lesen und mit gson deserialisieren (Dann hast Du wieder die ArrayList).
- ArrayList verändern
- ArrayList per gson in JSON String umwandeln und dann speichern.


----------



## wer112 (30. Jul 2021)

kneitzel hat gesagt.:


> Bitte immer genau sagen:
> - Was hast Du exakt gemacht?
> - Was hast Du exakt vorgefunden?
> 
> ...


Ich habe viele Youtube videos ausprobiert und hat nie funktioniert.
Jetzt habe ich dank den Link von Jw456 eine Liste, wo da die Strings feststehen. Ich habe ein runden Button, wo ein Alert Dialog aufgeht und zwei Input Felder sind. Dannach zeigt es beim okay klicken den Toast an. Ich habe das mit den SharedPref wie der Link von Jw456 gezeigt gehat gemacht in den Dialog(später muss es ja in der online Datenbank abspeichern....

Das sind die Seiten....


[CODE lang="java" title="Haupt Klasse"]package ..........................;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.app.AlertDialog;
import android.app.Fragment;
import android.content.SharedPreferences;
import android.database.DataSetObserver;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.renderscript.ScriptGroup;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class alle_apps_konsole extends Fragment {

    Button add_btn;

    TextView appname,packname;




    String app_name, pack_name;



    ListView list;


    String[] apptitle ={
            "Title 1","Title 2",
            "Title 3","Title 4",
            "Title 5",
    };


    String[] packtitle ={
            "Sub Title 1","Sub Title 2",
            "Sub Title 3","Sub Title 4",
            "Sub Title 5",
    };


    Integer[] imgid={
            R.drawable.ks_logo,R.drawable.ks_logo,
            R.drawable.ks_logo,R.drawable.ks_logo,
            R.drawable.ks_logo,
    };






    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        View fragmentlayout_alle_apps_konsole = inflater.inflate(R.layout.activity_alle_apps_konsole, null);

       ListAdapterKonsole adapter=new ListAdapterKonsole(getActivity(), apptitle, packtitle,imgid);
        list=(ListView)fragmentlayout_alle_apps_konsole.findViewById(R.id.listView);
        list.setAdapter(adapter);

       /* listView = (ListView)fragmentlayout_alle_apps_konsole.findViewById(R.id.listView); */
        add_btn = (Button)fragmentlayout_alle_apps_konsole.findViewById(R.id.add_button);
        appname = (TextView)fragmentlayout_alle_apps_konsole.findViewById(R.id.konsole_app_name_list);
        packname = (TextView)fragmentlayout_alle_apps_konsole.findViewById(R.id.konsole_pack_name_list);


        loadApps();





        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                // TODO Auto-generated method stub
                if(position == 0) {
                    //code specific to first list item
                    Toast.makeText(getActivity(),"Place Your First Option Code",Toast.LENGTH_SHORT).show();
                }

                else if(position == 1) {
                    //code specific to 2nd list item
                    Toast.makeText(getActivity(),"Place Your Second Option Code",Toast.LENGTH_SHORT).show();
                }

                else if(position == 2) {

                    Toast.makeText(getActivity(),"Place Your Third Option Code",Toast.LENGTH_SHORT).show();
                }
                else if(position == 3) {

                    Toast.makeText(getActivity(),"Place Your Forth Option Code",Toast.LENGTH_SHORT).show();
                }
                else if(position == 4) {

                    Toast.makeText(getActivity(),"Place Your Fifth Option Code",Toast.LENGTH_SHORT).show();
                }

            }
        });














        add_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

                final   View add_dialog = LayoutInflater.from(getActivity()).inflate(R.layout.layout_dialog_add_apps, (LinearLayout)fragmentlayout_alle_apps_konsole.findViewById(R.id.layoutAddAppsContainer));

                builder.setView(add_dialog);

                ((TextView) add_dialog.findViewById(R.id.textTitle)).setText("neue App");
                ((Button)add_dialog.findViewById(R.id.button_add_app)).setText("Okay");



                final AlertDialog alertDialog = builder.create();
                add_dialog.findViewById(R.id.button_add_app).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        EditText input_app_name = add_dialog.findViewById(R.id.input_app_name);
                        EditText input_package_name = add_dialog.findViewById(R.id.input_pack_name);;

                        app_name = input_app_name.getText().toString();
                        pack_name = input_package_name.getText().toString();



                        Toast.makeText(getActivity(), app_name + "\n" + pack_name, Toast.LENGTH_SHORT).show();



                        SharedPreferences sharedPreferences = getActivity().getSharedPreferences("apps_konsole", getActivity().MODE_PRIVATE);
                        SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
                        Gson gson = new Gson();
                        String appjson = gson.toJson(app_name);
                        String packjson = gson.toJson(pack_name);
                        prefsEditor.putString("appname_konsole", appjson);
                        prefsEditor.putString("packname_konsole", packjson);
                        prefsEditor.commit();



                        alertDialog.dismiss();
                    }
                });



                if (alertDialog.getWindow() != null) {
                    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                }

                alertDialog.show();


            }
        });








        return fragmentlayout_alle_apps_konsole;
    }

    private void loadApps() {

        SharedPreferences mPrefs = getActivity().getSharedPreferences("apps_konsole", getActivity().MODE_PRIVATE);
        Gson gson = new Gson();
        String json = mPrefs.getString("bacarraylist", "");
        Type type = new TypeToken<ArrayList>(){}.getType();
        ArrayList<alle_apps_list_konsole> arrayList= gson.fromJson(json, type);
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }


}[/CODE]

und der  Adapter:

[CODE lang="java" title="Adapter"]package com.andrealfredklug.klugstore;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;

public class ListAdapterKonsole extends ArrayAdapter<String> {

private final Activity context;
    private final String[] apptitle;
    private final String[] packtitle;
    private final Integer[] imgid;

    public ListAdapterKonsole(Activity context, String[] apptitle,String[] packtitle, Integer[] imgid) {
        super(context, R.layout.list_row_konsole, apptitle);
        // TODO Auto-generated constructor stub

        this.context=context;
        this.apptitle=apptitle;
        this.packtitle=packtitle;
        this.imgid=imgid;

    }

    public View getView(int position,View view,ViewGroup parent) {
        LayoutInflater inflater=context.getLayoutInflater();
        View rowView=inflater.inflate(R.layout.list_row_konsole, null,true);

        TextView titleText = (TextView) rowView.findViewById(R.id.konsole_app_name_list);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageKonsole);
        TextView subtitleText = (TextView) rowView.findViewById(R.id.konsole_pack_name_list);

        titleText.setText(apptitle[position]);
        imageView.setImageResource(imgid[position]);
        subtitleText.setText(packtitle[position]);

        return rowView;

    };
}[/CODE]


Die Liste:


[CODE lang="java" title="Die Liste"]package com.andrealfredklug.klugstore;

public class alle_apps_list_konsole {

    String appname;
    String packagename;

    int imageId;

    public alle_apps_list_konsole(String appname, String packagename, int imageId) {
        this.appname = appname;
        this.packagename = packagename;
        this.imageId = imageId;
    }



    public String getAppname() {
        return appname;
    }

    public String getPackagename() {
        return packagename;
    }

    public int getImageId() {
        return imageId;
    }
}
[/CODE]


----------



## wer112 (30. Jul 2021)

kneitzel hat gesagt.:


> - JSON lesen und mit gson deserialisieren (Dann hast Du wieder die ArrayList).
> - ArrayList verändern
> - ArrayList per gson in JSON String umwandeln und dann speichern.



Und wie mache ich das? Gibt es dazu ein guter Link zum lernen?(will mir ja nix falsches angewöhnen..  )


----------



## Jw456 (30. Jul 2021)

wer112 hat gesagt.:


> Und wie mache ich das? Gibt es dazu ein guter Link zum lernen?(will mir ja nix falsches angewöhnen..  )


dafür hast du meinen ersten link .
die Lib musst du beim Gradle einbinden.


----------



## wer112 (30. Jul 2021)

Jw456 hat gesagt.:


> dafür hast du meinen ersten link .
> die Lib musst du beim Gradle einbinden.











						ArrayList mit Objekten in SharedPreferences speichern
					

Android praktisches Wissen: Eine ArrayList mit Objekten in SharedPreferences speichern und wieder auslesen unter Verwendung von Gson.




					kelut.at
				




dort gibt es doch kein Lib.

Oder was meinst du mit ersten Link?


----------



## Jw456 (30. Jul 2021)

wenn Gson gefunden wird  OK.


----------



## kneitzel (30. Jul 2021)

Ja, der Link zeigt das Speichern einer Liste mittels gson. Die gson Library muss man dazu einbinden. Bei der Android App hast du ja Gradle als Buildtool, oder?

https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.7 zeigt das Maven Repository von der lib, den Gradle Eintrag findest Du im Gradle Reiter:
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.7'

Das muss halt in die build.gradle zu den anderen Abhängigkeiten. Wichtig: die innere build.gradle - also die im app Verzeichnis (So heisst das standardmäßig immer noch, oder? Habe zu lange kein neues Android Projekt gestartet  ).


----------



## wer112 (30. Jul 2021)

kneitzel hat gesagt.:


> implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.7'


Aufgrund von vielen Youtube videos hatte ich schon dieses Implementiert: implementation 'com.google.code.gson:gson:2.8.2'

Also werde ich das mal auf 7 stellen.

Und wie setze "adde" ich mein inpute in die Arrays?


----------



## Jw456 (30. Jul 2021)

wer112 hat gesagt.:


> Ich habe viele Youtube videos ausprobiert und hat nie funktioniert.
> Jetzt habe ich dank den Link von Jw456 eine Liste, wo da die Strings feststehen. Ich habe ein runden Button, wo ein Alert Dialog aufgeht und zwei Input Felder sind. Dannach zeigt es beim okay klicken den Toast an. Ich habe das mit den SharedPref wie der Link von Jw456 gezeigt gehat gemacht in den Dialog(später muss es ja in der online Datenbank abspeichern....




Du sprichst von einer Online datenbank du hast ja gar keine sondern ShPref. Das ist lokal.

Und ist auch nach den ausschalten des Handys immer noch vorhanden.



Du willst es wohl in den ShPrefs speichern.

Eigentlich willst eigentlich die zwei werte die du indem Dialog eingeben hast in dem Array speichern Richtig?

Dafür ist ein Array keine gute Idee das es statisch ist. Besser benutze eine ArrayList

Die kannst du auch gleich dem ListviewAdapter geben und auch gleich mit Gson in den ShPref Speichen.

Wen eine Eingabe erfolgt ist, musst du es erstmal der Arraylist hinzufugen und dann in Pref speichern.

Danach wider die Liste neu anzeigen lassen.


gradle    
dependencies {
 implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.7'


----------



## kneitzel (30. Jul 2021)

Also als erstes musst du Deinen Code etwas umstellen. Statt es in Array einzeln zu halten:

```
private final String[] apptitle;
    private final String[] packtitle;
    private final Integer[] imgid;
```

Solltest Du Deine Klasse nutzen:

```
public class alle_apps_list_konsole {

    String appname;
    String packagename;

    int imageId;
```

Wobei der Name da wohl nicht stimmig ist. Das ist ja eine App und keine Liste von allen Apps. Und man nutzt in der Regel ein CamelCase für Klassen Ein "alle_apps_list_konsole" wäre also "AlleAppsListKonsole" - aber wie gesagt: Eher wäre es eine Application.

Und dann solltest Du es in einer ArrayList speichern. Dann hättest Du statt den drei Arrays sowas:
private final List<Application> applicationList = new ArrayList<>();

Und der Konstruktor sollte die Daten entsprechend entgegen nehmen oder eben aus den 3 Arrays die ArrayList füllen.


----------



## Jw456 (30. Jul 2021)

wer112 hat gesagt.:


> Aufgrund von vielen Youtube videos hatte ich schon dieses Implementiert: implementation 'com.google.code.gson:gson:2.8.2'
> 
> Also werde ich das mal auf 7 stellen.
> 
> Und wie setze "adde" ich mein inpute in die Arrays?


Arrays sind Statisch da gibst es kein add, besser ArrayList


----------



## wer112 (30. Jul 2021)

Jw456 hat gesagt.:


> Du sprichst von einer Online datenbank du hast ja gar keine sondern ShPref. Das ist lokal.


Bis man mein Programmierer es online macht....


Jw456 hat gesagt.:


> Und ist auch nach den ausschalten des Handys immer noch vorhanden.


Ja, aber nicht, wenn du dich auf einem anderen Handy einloggst.


Jw456 hat gesagt.:


> Eigentlich willst eigentlich die zwei werte die du indem Dialog eingeben hast in dem Array speichern Richtig?


Das ist ja laut deine Links die einzigste Möglichkeit zu speichern?


Jw456 hat gesagt.:


> Dafür ist ein Array keine gute Idee das es statisch ist. Besser benutze eine ArrayList


Das muss ich später ausprobieren, wie es mit dem jetzigen Code und speichern funktioniert. Wie müsste ich es ungefähr machen?
und wie bekomme ich dann die Strings, die im Dialog entstehen in die Liste eintragen? Habe durch deinen Link mal probiert mit: link.add, was nicht funktionierte, vieleicht am Falschen Widget.


Jw456 hat gesagt.:


> Die kannst du auch gleich dem ListviewAdapter geben und auch gleich mit Gson in den ShPref Speichen.


????????????????????????????????????????????????


Jw456 hat gesagt.:


> Ein eine Eingabe erfolgt ist musst du es erstmal der Arraylist hinzufugen und dann in Pref speichern.
> 
> Danach wider die liste neu anzeigen lassen.
> 
> ...


----------



## Jw456 (30. Jul 2021)

Ich denke du musst dir noch einige Java Grudlagen ansehen.
erstmal Arraylist .

-SHprefs werden nie onnline sein.

-die einzige möglichkeit es zu speichen nein.

- wenn du es auf andere Handys gleichzetig haben willst  dan Online DB klar.
   aber dann brauchst du die ShPrefs nicht mehr zum speichen.

richtig für den Anfang testen mit ShPref.


----------



## wer112 (3. Aug 2021)

Jw456  ich habe ja erstmal ja den ganz Simplen List Code genommen, wo ich jetzt das Probem habe, dass ich, wenn ich ein Item ankicke, das nicht öffnen kann. Ich hätte da sehr gerne ein Fragment geöffnet und da es nicht funktionierte, wollte ich eine Klasse öffnen. Leider funktioniert es an der Stelle heraus, überhaupt nicht. Sonst geht es immer. Ich habe diese Sachen probiert:​
1. startActivity(new Intent(Alle_Apps.this, App_Fragment.class));

2. App_Fragment af = new App_Fragment();
    startActivity(af);

3. Intent i = new Intent(Alle_Apps.this, App_Fragment.class);
    startActivity(i);

4. Intent i = getActivity().getIntent()........

Wie komme ich auf einer neuen Seite, aus der Liste heraus?(Normalerweise benutze ich immer die 1.)


----------



## Jw456 (3. Aug 2021)

Was für ein Fehler kommt denn?

>Ich hätte da sehr gerne ein Fragment geöffnet​der wechsel zu einen anderen Fragment geht nicht mit einem  Intent.

Frage wo bist du in einem Fragment oder Activity?
Wohin willst du zu einem Fragment oder Activty?


----------



## wer112 (3. Aug 2021)

Jw456 hat gesagt.:


> Was für ein Fehler kommt denn?
> 
> >Ich hätte da sehr gerne ein Fragment geöffnet​der wechsel zu einen anderen Fragment geht nicht mit einem  Intent.
> 
> ...


Ich möchte am liebsten von einem Fragment in ein anderes Fragment, da sowas nicht funktioniert, habe ich mich entschieden(bis mein Programmierer wieder kommt), dass ich aus ein Fragment in eine normale Klasse wechsle. Dass funktioniert bis jetzt immer, wenn ich von Fragment zur Klasse wechsle. Aber das funktioniert nur nicht, wo man den Code hinschreiben muss(ItemClick...).

Fehler kommt an sich nicht richtig. Es wird Rot unterstrichen, aber keine richtige Fehlermeldung. Ich bin mit der Maus darauf gegangen und da steht (übersetzt Google Translator): Konstruktor kann nicht aufgelöst werden.


----------



## Jw456 (3. Aug 2021)

hierzu    startActivity(new Intent(Alle_Apps.this, App_Fragment.class));

" Alle_Apps.this" ist das die activity in der du bist? also die mit der Liste?
"App_Fragment.class" ist die Activity die du starten willst. istb das auch eine Activity oder nue eine Klasse ?
denn du sprichst immer von einer Klasse nicht von einer Activity. Einen Aktivity ist eine Klasse die von Activity erbt. 

wo in was bist du in einem Fragment oder Activity?

 zeige deinen Code.


----------



## kneitzel (3. Aug 2021)

wer112 hat gesagt.:


> Ich möchte am liebsten von einem Fragment in ein anderes Fragment,


Ja, dann mach das doch ... wenn es bei Dir nicht funktioniert, dann wäre der erste Schritt zu schauen, was Du genau gemacht hast.

Ablauf ist in der Regel:
- Du erstellst einen FragmentManager Du holst Dir den FragmentManager.
- Du startest eine FragmentTransaction
- Du nutzt die replace Methode von der FragmentTransaction, um ein Fragment durch ein Neues/Anderes zu ersetzen.
- Ein addToBackStack ist dann in der Regel noch dabei.
- Du machst ein commit auf der FragmentTransaction

Das Back ist dann ggf. noch zu behandeln - popBackStack vom FragmentManager wäre dann aufzurufen.

Das wäre so im Groben schon alles.

Edit: Hab erst nach dem Post gelesen, dass ich da was falsches geschrieben habe. Du holst Dir natürlich den FragmentManager und erstellst keinen neuen!


----------



## Jw456 (3. Aug 2021)

OK du bist in einem Fragment
zum start der Activity aus einem Fragment brauchst du den Kontext der Achtivity.


Intent i = new Intent(getActivty(), App_Fragment.class);
   getAxtivity().startActivity(i);

das startActivity ist bestimt rot unterstrichen


----------



## wer112 (3. Aug 2021)

kneitzel hat gesagt.:


> Ja, dann mach das doch ... wenn es bei Dir nicht funktioniert, dann wäre der erste Schritt zu schauen, was Du genau gemacht hast.
> 
> Ablauf ist in der Regel:
> - Du erstellst einen FragmentManager
> ...


Das ist so, ich habe ja bereits so eine Steuerung, die alle Fragmente steuert(was du schreibst). Wenn ich dann im Menü auf ein Fragment Klicke öffnet sich ein Fragment. Ich kann ja nicht, wenn ich schon in ein Fragment bin, ein anderes, Fragment öffnen. Ich habe das Fragment zur Steurung mal hinzugefügt und dann versucht z.B. aus dieses Fragment , ein weiteres zu öffnen. Ich möchte ja keine Millionen Menüpunkte haben. Jetzt habe ich gesagt, gut das funktioniert nicht, also starte ich eine Klasse aus dem Fragment, was ja ansicht immer funktioniert hat. Wenn man dann zurück drückt, wird immer der letzte Fragment geöffnet oder man geht einfach auf die Steuerung.

Normalerweise funktioniert ja ein Start auf eine anderen Klasse, nur nicht beim Item Click... Siehe das mit dem Code von dem Link vom Jw456.


----------



## Jw456 (3. Aug 2021)

Das menue ist in der Activity. Im Faragment im listener musst du fast das selbe machen.


----------



## wer112 (3. Aug 2021)

Jw456 hat gesagt.:


> OK du bist in einem Fragment
> zum start der Activity aus einem Fragment brauchst du den Kontext der Achtivity.
> 
> 
> ...


🤣🤣🤣🤣🤣🤣🤣🤣🤣 bin Blöd 🤣🤣. Du hast Recht 🤣🤣. In den Fragmente benutze ich ja immer getActivity() und setze alles "normale mit einem Punkt dahinter. Sorry 🤣🤣🤣🤣.  Jetzt wird das *nicht mehr Rot:* startActivity(new Intent(getActivity(), App_Fragment.class));


Aber kannst du mir mal erklären, wie ich aus einem Fragment ein anderes Fragment öffne? Ich möchte ja auf die Nav zugreifen können, sonst müsste der User immer die Zurücktaste drücken, da wäre ja die Toolbar am liebsten. Hast du da einen sehr guten Plan?


----------



## Jw456 (3. Aug 2021)

so wie es dein Menue macht.



> Ich möchte ja auf die Nav zugreifen können


Hast du einen NavDrawer wenn ja füge es doch dot hinzu.

Zeige nach welcher art du den Drawer hast.


----------



## wer112 (4. Aug 2021)

Jw456 hat gesagt.:


> OK du bist in einem Fragment
> zum start der Activity aus einem Fragment brauchst du den Kontext der Achtivity.
> 
> 
> ...


Ich habe das genauso gemacht, nachdem der Normale Weg scheiterte. Aber ich kann irgendwie aus dem Item Click keine Navigation zur einer anderen Klasse machen. Die App stürzt immer ab. in den Logcats bei Error stand da keine Zeile, was für das Problem verantwortlich sei.

Hier der Aktuelle Code von der Alle_Apps Fragment.....:


```
package ....................;

import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;


import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.Button;







import android.Manifest;
import android.app.DownloadManager;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

import com.google.android.material.navigation.NavigationView;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class Alle_Apps extends Fragment {

    Button btn;




    ListView list;


    String[] apptitle ={
            "Titel",
    };


    String[] packtitle ={
            "Beschreibung",
    };


    Integer[] imgid={
            ......logo,
    };


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        View fragmentlayout_alle_apps = inflater.inflate(R.layout.activity_alle__apps, null);




        ListAdapterKonsole adapter = new ListAdapterKonsole(getActivity(), apptitle, packtitle,imgid);
        list=(ListView)fragmentlayout_alle_apps.findViewById(R.id.listView_alle_apps);
        list.setAdapter(adapter);



        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                // TODO Auto-generated method stub
                if(position == 0) {
                    //code specific to first list item



                    Intent i = new Intent(getActivity(), App_Fragment.class);
                    getActivity().startActivity(i);

                    Toast.makeText(getActivity(),"Place Your First Option Code",Toast.LENGTH_SHORT).show();
                }



            }
        });




        return fragmentlayout_alle_apps;
    }



    


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
}
```


----------



## wer112 (4. Aug 2021)

Jw456 hat gesagt.:


> so wie es dein Menue macht.
> 
> 
> Hast du einen NavDrawer wenn ja füge es doch dot hinzu.
> ...




Das ist die erste Steuerung der Fragmente:


[CODE lang="java" title="Die Steuerung"]package ...........;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintSet;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.navigation.NavigationView;

public class fragment_steuerung extends AppCompatActivity {

    TextView header_kundennummer, header_email;


    int i_b1 = Color.parseColor("#e0e0e0"), i_b2 = Color.parseColor("#e0e0e0"), i_b3 = Color.parseColor("#e0e0e0"), i_b4 = Color.parseColor("#e0e0e0"), i_b5 = Color.parseColor("#e0e0e0"), i_b6 = Color.parseColor("#e0e0e0"), i_b7 = Color.parseColor("#e0e0e0"), i_b8 = Color.parseColor("#000000"), i_b10 = Color.parseColor("#e0e0e0"),  i_b9 = Color.parseColor("#e0e0e0");







    NavigationView nav;
    ActionBarDrawerToggle toggle;
    DrawerLayout drawerLayout;

    public LinearLayout nav_heder;

    public home home;
    public Alle_Apps alle_apps;
    public ............................................;
    public ............................................;
    public ............................................;
    public ............................................;
    public  ............................................;
    public ............................................;
    public ............................................;
    public ............................................;
    public ............................................;
    public ............................................;
    public ............................................;
    public ............................................;
    public  ............................................;
    public ............................................;
    public ............................................;
    public Impressum impressum;
    public app_einstellungen app_einstellungen;









    public FragmentManager fragmentManager;
    public FragmentTransaction fragmentTransaction;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment_steuerung);

        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        FarbenImport();


        ColorStateList menueTextColor = ColorStateList.valueOf(i_b9);

        nav = (NavigationView)findViewById(R.id.navmenu);
        nav_heder = (LinearLayout)findViewById(R.id.nav_header);


        header_kundennummer = (TextView)findViewById(R.id.kundennummer_header);
        header_email = findViewById(R.id.email_header);


        /*


        header_kundennummer.setTextColor(i_b2);
        header_email.setTextColor(i_b2);



         */



        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setBackgroundColor(i_b6);
        toolbar.setTitleTextColor(i_b8);



        home = (home) Fragment.instantiate(this, home.class.getName(), null);
        alle_apps = (Alle_Apps) Fragment.instantiate(this, Alle_Apps.class.getName(), null);
        ............................................ = (............................................) Fragment.instantiate(this, ............................................ .class.getName(), null);
        ............................................ = (............................................) Fragment.instantiate(this, ............................................ .class.getName(), null);
        ............................................ = (............................................) Fragment.instantiate(this, ............................................s.class.getName(), null);


........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

        hilfe = (Hilfe) Fragment.instantiate(this, Hilfe.class.getName(), null);
        kontakt = (Kontakt) Fragment.instantiate(this, Kontakt.class.getName(), null);
        impressum = (Impressum) Fragment.instantiate(this, Impressum.class.getName(), null);
        app_einstellungen = (app_einstellungen) Fragment.instantiate(this, app_einstellungen.class.getName(), null);







        fragmentManager = getFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.homelayout, home);
        fragmentTransaction.commit();
        toolbar.setTitle("............................................");


        toolbar.setBackgroundColor(i_b6);
        toolbar.setTitleTextColor(i_b8);


        /*




        nav_heder.setBackgroundColor(i_b7);





         */


        drawerLayout = (DrawerLayout)findViewById(R.id.drawer);

        toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();



        nav.setItemTextColor(menueTextColor);





        nav.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuitem) {



                switch (menuitem.getItemId()) {

                    case R.id.alle_apps_icon:

                        toolbar.setTitle("Alle Apps");

                        fragmentManager = getFragmentManager();
                        fragmentTransaction = fragmentManager.beginTransaction();
                        fragmentTransaction.replace(R.id.homelayout, alle_apps);
                        fragmentTransaction.commit();


                        drawerLayout.closeDrawer(GravityCompat.START);
                        break;


                    case R.id.............................................:

                        toolbar.setTitle("............................................");

                        fragmentManager = getFragmentManager();
                        fragmentTransaction = fragmentManager.beginTransaction();
                        fragmentTransaction.replace(R.id.homelayout, ............................................);
                        fragmentTransaction.commit();


                        drawerLayout.closeDrawer(GravityCompat.START);
                        break;



                   ........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................


                    case R.id.abmelden_icon:

                       startActivity(new Intent(fragment_steuerung.this, login.class));
                        break;
                }



                return true;
        }
    });
}




    public void FarbenImport(){

    SharedPreferences prefs = getSharedPreferences("app_einstellungen", MODE_PRIVATE);
    i_b1 = prefs.getInt("schriftfarbe1" , i_b1);
    i_b2 = prefs.getInt("schriftfarbe2" , i_b2);
    i_b3 = prefs.getInt("schriftfarbe3" , i_b3);
    i_b9 = prefs.getInt("schriftfarbe_menue" , i_b9);
    i_b4 = prefs.getInt("schriftfarbe_button" , i_b4);
    i_b5 = prefs.getInt("button_hintergrund" , i_b5);
    i_b6 = prefs.getInt("toolbar_farbe" , i_b6);
    i_b8 = prefs.getInt("toolbar_textfarbe" , i_b8);
    i_b7 = prefs.getInt("header_hintergrund" , i_b7);
    i_b10 = prefs.getInt("header_textfarbe" , i_b10);



}



}[/CODE]


----------



## Jw456 (4. Aug 2021)

> public class Alle_Apps extends Fragment {


ist ein Fragment und keine Activity.
Activity extendet von Activity (AppCompatActivity) ein fragment kannst du nicht mit einem Intent starten.





> Aber ich kann irgendwie aus dem Item Click keine Navigation zur einer anderen Klasse machen.


höre auf das immer nur als Klasse zu sehen. Ja es sind Klasse aber beide extenden anders Fragment oder Activity.
Das ist enorm wichtig.




wenn du in eimen Fragment bist und das Fragment ohne den Drawer tauschen willst machst du das fast genauso wie im Drawer.

in etwa so nicht getestet.


```
Alle_Apps alle_apps = (Alle_Apps) Fragment.instantiate(getActivity(), Alle_Apps.class.getName(), null);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction    fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.homelayout, alle_apps);
fragmentTransaction.commit();
```


----------



## Jw456 (4. Aug 2021)

Fragment wechseln | NextPit Forum
					

Ich programmiere momentan an einer kleinen Android App und habe ein kleines Problem und komme nicht weiter. Ich weiß nicht ob ich den richtigen Ansatz (...)




					www.nextpit.de


----------



## wer112 (11. Aug 2021)

Jw456 hat gesagt.:


> ist ein Fragment und keine Activity.
> Activity extendet von Activity (AppCompatActivity) ein fragment kannst du nicht mit einem Intent starten.
> 
> 
> ...



Ich danke dir. Ich habe in der Fragment Steuerung Die Seite hinzugefügt und es gefunden... und aber im Fragment dann die FT benutzt, was ich im Menü ja benutze und jetzt hat es geklappt. Danke nochmals. 

Kurze Frage: Weißt du, warum zwischen die Toolbar und der Seite, noch etwas Platz ist?


----------



## Jw456 (11. Aug 2021)

wer112 hat gesagt.:


> Ich danke dir. Ich habe in der Fragment Steuerung Die Seite hinzugefügt und es gefunden... und aber im Fragment dann die FT benutzt, was ich im Menü ja benutze und jetzt hat es geklappt. Danke nochmals.
> 
> Kurze Frage: Weißt du, warum zwischen die Toolbar und der Seite, noch etwas Platz ist?


Dazu wäre das Layout wichtig zu kennen. Von der Activity und Fragment. 
Vileicht ein Bild wo man sieht was du meinst.


----------



## wer112 (11. Aug 2021)

Also zwischen dem Ersten Bild und der Toolbar. Siehst nicht schön aus. 

Hier der Anfang des Codes:


```
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/app_fragment_id"
    tools:context=".App_Fragment">


    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/imageView"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:background="#e0e0e0"
                android:src="@android:drawable/ic_menu_gallery"
                />
```



(Farbe im Toolbar bzw. Toolbar Text, kann jeder selber in der App ja einstellen, sowie die Farbe für, Menü Schrift, Hintergrundfarben, Button Farben, Jeder Text(Auch Buttons...))


----------



## Jw456 (11. Aug 2021)

ist das Layout das Fragment.
zeige das der Activity. 
sieht für mich nach einen Margin bei den Fragment Container im Laout der Activity aus.


----------



## wer112 (11. Aug 2021)

Jw456 hat gesagt.:


> ist das Layout das Fragment.


Ja es gehört ein Fragment



Jw456 hat gesagt.:


> zeige das der Activity.


????


Jw456 hat gesagt.:


> sieht für mich nach einen Margin bei den Fragment Container im Laout der Activity aus.


Nirgendswo steht ja margin. Es ist ein ReletiveLayout mit einem LinealLayout. Damit ich nicht ständig mir below arbeiten muss.


----------



## Jw456 (11. Aug 2021)

ich will die xml die in der Activity  mit sentcontenview geladen wird.


----------



## wer112 (11. Aug 2021)

Jw456 hat gesagt.:


> ich will die xml die in der Activity  mit sentcontenview geladen wird.


Wie meinst du das? Ich verstehe nur Bahnhof. Ich gehe in meinem Fragment(Java) und mache was?

Das Layout wird in dem Fragment so geladen:


```
@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        View fragmentlayout_app_fragment = inflater.inflate(R.layout.activity_app__fragment, null);
```


----------



## Jw456 (11. Aug 2021)

es wird nicht am fragment liegen.


----------



## wer112 (11. Aug 2021)

Jw456 hat gesagt.:


> es wird nicht am fragment liegen.


Also was muss ich beim Layout machen? Bzw. warum entsteht eine Lücke dort?


----------



## Jw456 (11. Aug 2021)

Zum Verständnis das Fragment wird in ein layout was sich in der activity befindet eingeblendet. 
Wie ein Bild in einem Bilderrahmen ist und der Rahmen ist in der Activity.


----------



## Jw456 (11. Aug 2021)

wer112 hat gesagt.:


> Also was muss ich beim Layout machen? Bzw. warum entsteht eine Lücke dort?


ohne code kann ich ich es nicht sagen.


----------



## Jw456 (11. Aug 2021)

fragmentTransaction.replace(R.id.homelayout, alle_apps);

die id zeigt dir den Container (Bilderrahmen) in der Activity.

es könnte auch es margin der ToolBar sein


----------



## wer112 (11. Aug 2021)

Jw456 hat gesagt.:


> fragmentTransaction.replace(R.id.homelayout, alle_apps);
> 
> die id zeigt dir den Container (Bilderrahmen) in der Activity.
> 
> es könnte auch es margin der ToolBar sein


Mit  dem letzten Punkt kommen wir näher. Es war nicht bei der Toolbar, sondern bei RelativeLayout. 
Jetzt ist die Lücke komplett weg. 
Aber neues Problem ist nun, das die Toolbar das Bild zum Teil verdeckt. Leider kann ich kein below machen. Wie bekomme ich das RelativLayout genau unter die Toolbar. 

[CODE lang="xml" title="Das ist die Activity von der Fragment Steuerung"]<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:background="#fff"
    android:id="@+id/drawer"
    toolspenDrawer="start"
    tools:context=".fragment_steuerung">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:id="@+id/homelayout">

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#e0e0e0"




            />


    </RelativeLayout>

    <com.google.android.material.navigation.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/navmenu"
        app:menu="@menu/iconmenu"
        app:headerLayout="@layout/navheader"
        android:layout_gravity="start"/>







</androidx.drawerlayout.widget.DrawerLayout>
[/CODE]


----------



## Jw456 (11. Aug 2021)

```
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    tools:context=".fragment_steuerung"
    tools:openDrawer="start">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#e0e0e0" />

        <RelativeLayout
            android:id="@+id/homelayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/toolbar">

        </RelativeLayout>


    </RelativeLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navmenu"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/navheader"
        app:menu="@menu/iconmenu" />


</androidx.drawerlayout.widget.DrawerLayout>
```

Der Layout  Designer  in AS hilft dir doch.


----------



## wer112 (13. Aug 2021)

Jw456 hat gesagt.:


> ```
> <?xml version="1.0" encoding="utf-8"?>
> <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
> xmlns:app="http://schemas.android.com/apk/res-auto"
> ...



Vielen Dank!! Es hat jetzt funktioniert. Habe wie es aussieht falsch sortiert.

PS.: Leider wird es nicht richtig angezeigt im AS. 
Nochmals Danke


----------



## Jw456 (13. Aug 2021)

wer112 hat gesagt.:


> Vielen Dank!! Es hat jetzt funktioniert. Habe wie es aussieht falsch sortiert.
> 
> PS.: Leider wird es nicht richtig angezeigt im AS.
> Nochmals Danke


was wird das nicht angezeigt?


edit:
Das Element was keine Ankerpunkte hat wird im Layout  immer oben angezeigt. 
Wo das im XML File steht ist ziemlich  egal.


----------



## wer112 (13. Aug 2021)

Jw456 hat gesagt.:


> was wird das nicht angezeigt?


Ich splittere ja das immer. Und da wird das ja auf der Grafik nicht richtig angezeigt, wo das alles sich genau befindet...
Mein AS spint komplett rum. Habe kein Zugrif auf die Vektor Images. Muss die extra aus dem Browser downloaden...


----------



## Jw456 (14. Aug 2021)

Was der AS Designer zeigt und was dann zu Laufzeit angezeigt wird ist nicht immer das gleiche.



> Habe kein Zugrif auf die Vektor Images. Muss die extra aus dem Browser downloaden...



Was meinst du damit Erklär mir das genauer.



Bei einem Relativ Laout ist ein View Element *ohne* Ankerpunkte immer oben links.
Auch ein untergeordnetes Layout ist ein Viewelement in dem gesamten Relativ Layout.
Ohne Ankerpunkte können sich die Elemente überdecken.
.
Ankerpunkte beziehen sich immer auf die ID eines anderen Element. Oder auf das eltern Layout.

Sind zb.

android:layout_above
android:layout_alignBottom
android:layout_alignLeft
android:layout_alignParentBottom
android:layout_alignParentEnd
android:layout_alignParentLeft
android:layout_alignParentRight
android:layout_alignParentStart
android:layout_alignParentTop
android:layout_alignRight
android:layout_alignStart
android:layout_alignTop
android:layout_below
android:layout_centerHorizontal
android:layout_centerInParent
android:layout_centerVertical
android:layout_toEndOf
android:layout_toLeftOf
android:layout_toRightOf
android:layout_toStartOf




			https://developer.android.com/reference/android/widget/RelativeLayout
		






​


----------



## wer112 (18. Sep 2021)

So, ich dachte mir, ich probiere es erneut eine Liste zu erstellen. Nachlangen recherchiern konnte ich nun eine Liste erzeugen. Ich konnte Elemente hinzufügen. Leider ist es mir nicht gelungen 3 Sachen zu setzen. Ich habe versucht alles in den Adapter reinzupacken, aber dann leuchtet <> rot.
Darauf hin habe ich zwei Adapter gemacht und beide in ListView gesetzt, aber er hat die unteren Zeilen ausgefüllt, aber nicht die obrigen.

Wie kann ich auf einfachen Weg. ein Bild und zwei Texte(2 Zeilig) setzen? 

Leider finde ich dies bezüglich nixs. Und wie ich auch rausfand ein String Array, kann nixs hinzugefügt werden. Denn den Link der Jw456 mal gab und ich benutzt hatte, funktionierte nur mit String Arrays. 

Da ich das dynamisch haben muss, da der Entwickler ja neue Apps hinzufügen will, muss ich eine List benutzen. Aber da bekomme ich immer nur eine Zeile hin, egal ob oben oder unten. Das Applogo müsste ja dann auch gesetzt werden.

Könnt ihr mir bitte helfen, wie ich die 3 Sachen mache?

Hier der Code von 1 Variante(erste Zeile):


```
List<Integer> list_applogo = new ArrayList<>(Arrays.asList(applogo));
        List<String> list_appname = new ArrayList<>(Arrays.asList(appname));
        List<String> list_packagename = new ArrayList<>(Arrays.asList(packname));

        


        ArrayAdapter<String> listeAdapter = new ArrayAdapter<>(
                getActivity(),
                R.layout.list_row_konsole,
                R.id.konsole_app_name_list,
                list_appname);

        




        listView = (ListView)fragmentlayout_alle_apps_konsole.findViewById(R.id.listView);
        listView.setAdapter(listeAdapter);
```


Und dort füge ich neue Apps hinzu:



```
String appname_edit = input_app_name.getText().toString().trim();
                        String packagename_edit = input_package_name.getText().toString().trim();
                        Toast.makeText(getActivity(), appname_edit, Toast.LENGTH_SHORT).show();

                        // App Id wird registriert



                        list_applogo.add(R.drawable.ks_logo);
                        list_appname.add(appname_edit);
                        list_packagename.add(packagename_edit);

                        // App Id Elemente werden um gespeichert und in Datenbank gespeichert
```


----------



## Jw456 (18. Sep 2021)

Du hast drei Arraylisten OK .

Ich würde es zwar anders machen eine „DatenKlasse“ in der alle drei Parameter gespeichert werden. Und diese dann in eine Liste packen.

Ok du Willst es mit drei Listen.
Bein erstellen der Liste was ist „applogo“ ?
Mit assList versucht du wohl ein Array in eine Liste zu speichern?

Es wird aber nur ein Element je Liste hinzugefügt.
Nur was ist input_app_name Ich denke EditText?


*Du musst dir schon einen Custom ArrayAdapter erstellen.
Du hast momentan nur einen der eine deiner Listen benutzt.*


----------



## wer112 (18. Sep 2021)

Jw456 hat gesagt.:


> Du hast drei Arraylisten OK .
> 
> Ich würde es zwar anders machen eine „DatenKlasse“ in der alle drei Parameter gespeichert werden. Und diese dann in eine Liste packen.


Das hatte ich glaube ich mal gemacht(Der Code der von dir ist.) Das problem ist ja das ich keine Elemente hinzufügen kann. Weil das nur Strings Arrays benutzt. (Was funktioniert hatte). Ich muss ja das hinzufügen können und das ging irgendwie nur mit den List...


Jw456 hat gesagt.:


> Ok du Willst es mit drei Listen.
> Bein erstellen der Liste was ist „applogo“ ?


Wenn ein Entwickler eine neue App anlegt, wird ja erst nut der App Name, Package Name und das App Dammy Logo angelegt(+App Id). Das Logo ist ja das Bild von der App(Symbol...)


Jw456 hat gesagt.:


> Mit assList versucht du wohl ein Array in eine Liste zu speichern?
> 
> Es wird aber nur ein Element je Liste hinzugefügt.
> Nur was ist input_app_name Ich denke EditText?


Ja das ist EditText vom Dialog.


Jw456 hat gesagt.:


> *Du musst dir schon einen Custom ArrayAdapter erstellen.*


*Und dann kann ich alle drei Listen anzeigen lassen an der Richtigen position?
Wie macht man ein Custom Array Adapter? 

Gibt es da was einfachen code?

Ich versuche ja das grade alles zu lernen und wie es ja funktioniert. Und das meiste ist ja nur einzeilig, die anderen funktionieren nicht(Die Views...)*


Jw456 hat gesagt.:


> *Du hast momentan nur einen der eine deiner Listen benutzt.*


ich habe mal das ausprobiert gehabt:


```
String appname_edit = input_app_name.getText().toString().trim();
                        String packagename_edit = input_package_name.getText().toString().trim();
                        Toast.makeText(getActivity(), appname_edit, Toast.LENGTH_SHORT).show();

                        // App Id wird registriert



                        list_applogo.add(R.drawable.ks_logo);
                        list_appname.add(appname_edit);
                        list_packagename.add(packagename_edit);

                        // App Id Elemente werden um gespeichert und in Datenbank gespeichert
```

Da wird nur der PackageName in doie Zeile 2 geschrieben und die erste Zeile wird ignoriert.

Ich habe außerdem mal das probiert:


```
ArrayAdapter<String> listeAdapter = new ArrayAdapter<>(
                getActivity(),
                R.layout.list_row_konsole,
                R.id.konsole_app_name_list,
                R.id.konsole_pack_name_list,
                list_appname,
                list_packagename);

      




        listView = (ListView)fragmentlayout_alle_apps_konsole.findViewById(R.id.listView);
        listView.setAdapter(listeAdapter);
```

Aber da wird das <> von new ArrayAdapter rot gekennzeichnet.


----------



## Jw456 (18. Sep 2021)

wer112 hat gesagt.:


> ```
> ArrayAdapter<String> listeAdapter = new ArrayAdapter<>(
> getActivity(),
> R.layout.list_row_konsole,
> ...



Das geht auch nicht.
Wenn du in die Doku schaust weißt du das es diesen Konstruktor zu ArrayAdapter nicht gibt.


			https://developer.android.com/reference/android/widget/ArrayAdapter
		






Du musst dir selber einen Adapter schreiben das ist dann eine eigene Klasse die dann meist von ArrayAdapter erbt.

Ps ich habe dir mit Sicherheit keinen Code gegeben maximal einen Link der weiter helfen könnte.


Also schaue im Netz nach einem Custom ListView (Adapter) für android .
Natürlich sind das dann Beispiele um deine Funktionalität musst du dich dann schon selber kümmern. Das wirst du nicht fertig finden. Die links dienen dazu die Logik die dahinter steckt zu verstehen.  Nicht einfach Copy Paste






						Android ListView with Custom Adapter Example Tutorial  | DigitalOcean
					

Technical tutorials, Q&A, events — This is an inclusive place where developers can find or lend support and discover new ways to contribute to the community.




					www.journaldev.com


----------



## Jw456 (18. Sep 2021)

Diesen Link hatte ich mal gegeben. "nur Link"





						Android Custom ListView - javatpoint
					

Android Custom ListView Example with examples of Activity and Intent, Fragments, Menu, Service, alarm manager, storage, sqlite, xml, json, multimedia, speech, web service, telephony, animation and graphics



					www.javatpoint.com
				



Ja da werden Arrays benutzt aber wo ist jetzt das Problem es auf ArrayListen umzustellen?
Dazu solltest du in der Lage sein. Ansonsten Grundlagen Java Listen anschauen.


----------



## wer112 (18. Sep 2021)

Jw456 hat gesagt.:


> Diesen Link hatte ich mal gegeben. "nur Link"
> 
> 
> 
> ...


Ja das war der Link, den du mal gegeben hattest. Wenn du mal geschauen hat, benutzte er nur Strings Arrays. Was ich leider nicht benutzen kann.

Ich habe im Internet mal nach Custom List Java android gegoogelt, leider finde ich wenn nur Sachen mit Strings Arrays.

Ich habe auch versucht die List in ein String Array umzuwandeln, was auch nicht funktionierte.

Das mit den String Arrays, währe ja für das normale anzeigen der Apps für die Nutzer kein Problem, da es ja eine feste Array größe festgelegt ist...

Aber in der Entwickler Konsole darf ich kein String Array verwenden, da ich eine dynamische Liste brauche, wo der Entwickler seine Apps zur Liste hinzufügen kann.

Leider kann man kein* .add()* zu einem String Array machen, wo ja das Problem liegt. Und ich kann auch meine 3 Listen nicht an den Adapter Klasse(Wie im Link) übergeben, da es nur String Arrays funktionieren.


----------



## Jw456 (18. Sep 2021)

Wenn es dir nicht möglich ist den link den damals und heute gegeben habe auf Arraylisten umzuschreiben. Würde ich sagen dann lernne erstmal java Grundlagen. 

Der zweite link von heute benutz eine Liste mit einem Daten Model. 

Und du findest keine Code Beispiel im Netz.


----------



## Jw456 (19. Sep 2021)

So hier der Code aus dem Link mit den drei Arrays als Listen.

Das ist eigentlich eine einfache Anfänger Übung in Java. Einen Code der ein Array benutzt in Arraylist zu bringen. Wenn du so etwas nicht kannst solltest du erst mal Java Grundlagen lernen bevor du mit Android weiter machst.
Wie du nun das in deine Logik mit deinen Listen bringst ist deine Sache dabei werde ich dir nicht helfen.


```
public class MainActivity extends AppCompatActivity {

    ListView list;

    /*String[] maintitle ={
            "Title 1","Title 2",
            "Title 3"
    };
    String[] subtitle ={
            "Sub Title 1","Sub Title 2",
            "Sub Title 3"
    };
    Integer[] imgid={
            R.drawable.download_1,R.drawable.download_2,
            R.drawable.download_3
    };*/

    ArrayList maintitle = new ArrayList<String>();
    ArrayList subtitle = new ArrayList<String>();
    ArrayList imgid = new ArrayList<Integer>();

    void setMyLists(){
        maintitle.add("Title1");
        maintitle.add("Title2");
        maintitle.add("Title3");

        subtitle.add("Sub Title 1");
        subtitle.add("Sub Title 2");
        subtitle.add("Sub Title 3");

        imgid.add(R.drawable.download_1);
        imgid.add(R.drawable.download_2);
        imgid.add(R.drawable.download_3);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setMyLists();

        MyListAdapter adapter=new MyListAdapter(this, maintitle, subtitle,imgid);
        list=(ListView)findViewById(R.id.list);
        list.setAdapter(adapter);


        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // TODO Auto-generated method stub
                if(position == 0) {
                    //code specific to first list item
                    Toast.makeText(getApplicationContext(),"Place Your First Option Code",Toast.LENGTH_SHORT).show();
                }

                else if(position == 1) {
                    //code specific to 2nd list item
                    Toast.makeText(getApplicationContext(),"Place Your Second Option Code",Toast.LENGTH_SHORT).show();
                }

                else if(position == 2) {

                    Toast.makeText(getApplicationContext(),"Place Your Third Option Code",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}
```


```
public class MyListAdapter extends ArrayAdapter<String> {

    private final Activity context;
    private ArrayList maintitle ;
    private ArrayList subtitle ;
    private ArrayList imgid ;

    public MyListAdapter(Activity context, ArrayList<String> maintitle, ArrayList<String> subtitle, ArrayList<Integer> imgid) {
        super(context, R.layout.mylist, maintitle);
        // TODO Auto-generated constructor stub

        this.context = context;
        this.maintitle = maintitle;
        this.subtitle = subtitle;
        this.imgid = imgid;

    }

    public View getView(int position, View view, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.mylist, null, true);

        TextView titleText = (TextView) rowView.findViewById(R.id.title);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
        TextView subtitleText = (TextView) rowView.findViewById(R.id.subtitle);

        titleText.setText(maintitle.get(position).toString());
        imageView.setImageResource((Integer) imgid.get(position));
        subtitleText.setText(subtitle.get(position).toString());

        return rowView;
    };
}
```


----------



## temi (19. Sep 2021)

```
ArrayList maintitle = new ArrayList<String>();
    ArrayList subtitle = new ArrayList<String>();
    ArrayList imgid = new ArrayList<Integer>();
```

Rohtypen sollten nicht verwendet werden!

Besser:

```
ArrayList<String> maintitle = new ArrayList<String>();
    ArrayList<String> subtitle = new ArrayList<String>();
    ArrayList<Integer> imgid = new ArrayList<Integer>();

// bzw. noch besser mit dem Interface

    List<String> maintitle = new ArrayList<String>();
    List<String> subtitle = new ArrayList<String>();
    List<Integer> imgid = new ArrayList<Integer>();

// oder kürzer

    List<String> maintitle = new ArrayList<>();
    List<String> subtitle = new ArrayList<>();
    List<Integer> imgid = new ArrayList<>();
```


----------



## Jw456 (19. Sep 2021)

```
ArrayList<String> maintitle = new ArrayList<>();
ArrayList<String> subtitle = new ArrayList<>();
ArrayList<Integer> imgid = new ArrayList<>();
```

gut dann eben so


----------



## Jw456 (19. Sep 2021)

temi hat gesagt.:


> Rohtypen sollten nicht verwendet werden!



gebe mir bitte einen Grund Beispiel warum RohTypen nicht verwendet werden sollten.


----------



## kneitzel (19. Sep 2021)

Jw456 hat gesagt.:


> gebe mir bitte einen Grund Beispiel warum RohTypen nicht verwendet werden sollten.


Wenn Du gegen Interfaces entwickelst, dann hast Du keine feste Abhängigkeit zu der konkreten Implementierung. Dadurch kann die konkrete Implementierung z.B. jederzeit gewechselt werden.

Edit: Mit "Rohtypen" war das Weglassen des Generics gemeint: Du verlierst die Typsicherheit. Wenn Du einfach nur eine ArrayList hast, dann kannst Du da alles rein packen. Aber Du willst ja eine List mit speziellen Inhalt. Daher wurde mit Java 1.5 Generics eingeführt.

Edit2: Typo korrigiert


----------



## temi (19. Sep 2021)

Jw456 hat gesagt.:


> gebe mir bitte einen Grund Beispiel warum RohTypen nicht verwendet werden sollten.


`List list` entspricht einer `List<Object> list` in die du jeden beliebigen Typen einfügen kannst. Das ist meist nicht, was du möchtest. Sie bietet keinerlei Typsicherheit.


----------



## Jw456 (19. Sep 2021)

kneitzel hat gesagt.:


> Wenn Du gegen Interfaces entwickelst, dann hast Du keine feste Abhängigkeit zu der konkreten Implementierung. Dadurch kann die konkrete Implementierung z.B. jederzeit gewechselt werden.


Ja ArrayList ist für mich kein Interface.


----------



## temi (19. Sep 2021)

Jw456 hat gesagt.:


> Ja ArrayList ist für mich kein Interface.


Darum als beste Lösung z. B. `List<String> list = new ArrayList<>();`


----------



## kneitzel (19. Sep 2021)

Jw456 hat gesagt.:


> Ja ArrayList ist für mich kein Interface.


Daher das Edit, das ich gemacht habe. Es geht um eine Typsicherheit. In eine ArrayList<String> kannst Du nur Strings packen, in eine ArrayList<Integer> nur Integer. In eine ArrayList kannst Du alles packen und entsprechend kannst Du zur Laufzeit Probleme bekommen.


----------



## Jw456 (19. Sep 2021)

temi hat gesagt.:


> `List list` entspricht einer `List<Object> list` in die du jeden beliebigen Typen einfügen kannst. Das ist meist nicht, was du möchtest. Sie bietet keinerlei Typsicherheit.


Ich habe ja die Variable nicht nur Deklariert sondern auch gleich Definiert.


----------



## Jw456 (19. Sep 2021)

kneitzel hat gesagt.:


> Daher das Edit, das ich gemacht habe. Es geht um eine Typsicherheit. In eine ArrayList<String> kannst Du nur Strings packen, in eine ArrayList<Integer> nur Integer. In eine ArrayList kannst Du alles packen und entsprechend kannst Du zur Laufzeit Probleme bekommen.


ok


----------



## temi (19. Sep 2021)

..


Jw456 hat gesagt.:


> Ich habe ja die Variable nicht nur Deklariert sondern auch gleich Definiert.


Probier es doch aus!

```
public static void main(String[] args) {
        List liste = new ArrayList<String>();

        liste.add("Foo");
        liste.add(42);
        liste.add(4.2);
        liste.add(new Date());
        
    }
```


----------



## Jw456 (19. Sep 2021)

temi hat gesagt.:


> ..
> 
> Probier es doch aus!
> 
> ...


OK


----------

