Dynamischer ViewPager mit generierten Daten

  • Antworten:5
Simon2202
  • Forum-Beiträge: 9

29.04.2018, 13:46:14 via Website

Schönen Sonntag!

Ich bin relativ neu im Bereich der Android Entwicklung und versuche mich derzeit an meiner ersten App und mir dafür alles nötige aus Tutorials und der Google Dokumentation zusammenzusuchen.

Jetzt möchte ich allerdings innerhalb einer Activity einen ViewPager verwenden, der zwar jedes Mal das selbe Fragment verwendet, sich jedoch die Daten dynamisch ändern. Und trotz der Tutorials, die sich teilweise drastisch unterscheiden, komme ich einfach nicht auf die für mich passende Lösung, ich komme überhaupt nicht dahinter was ich ändern muss damit ich mein Fragment mit meinen Daten befüllen kann.

So sieht mein Fragment aus, das ich gerne dynamisch befüllen würde: (fragment_layout.xml)
image

Es sind 3 ConstraintLayouts, mit jeweils einem Image und einem TextView.

Ich generiere die Daten in einer anderen Activity und möchte entsprechend der Klasse der Häuser den Image und TextView ändern.

HouseProps[id][h_class]={0,1,2,3}

Beispiel:

if(HouseProps[0][h_class] == 2){//Zeige im Ersten Layout auf der Ersten Seite die Daten von Klasse 2)

Jetzt habe ich zwar ein Tutorial gefunden, das dynamische ViewPager erklärt, komme aber überhaupt nicht darauf wie ich das Ganze ändern muss, damit es bei mir funktioniert.

BuyHousesActivity.java (Die Activity, die gestartet wird und durch die dann der ViewPager geladen werden soll)

public class BuyHousesActivity extends AppCompatActivity {

private ViewPager viewPager;
private List<String> listItem = new ArrayList<>();
private BHViewPagerAdapter fragmentAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_buy_houses);
    Houses h = new Houses();
    h.GenerateHouses();
    DatabaseHandler db = new DatabaseHandler(this);

    viewPager = findViewById(R.id.bhPager);

    setData();

}

private void setData(){
    listItem.add("Ini adalah fragment 1");
    listItem.add("Ini adalah fragment 2");
    listItem.add("Ini adalah fragment 3");
    listItem.add("Ini adalah fragment 4");
    listItem.add("Ini adalah fragment 5");

    fragmentAdapter = new BHViewPagerAdapter(this, getSupportFragmentManager(), listItem);
    viewPager.setAdapter(fragmentAdapter);
    viewPager.setCurrentItem(0);

}

}

BHViewPagerAdapter.java

public class BHViewPagerAdapter extends FragmentStatePagerAdapter {

private Context ctx;
private List<String> data;
private Fragment[] fragments;

public BHViewPagerAdapter(Context ctx, FragmentManager fm, List<String> data) {
    super(fm);
    this.ctx = ctx;
    this.data = data;
    fragments = new Fragment[data.size()];
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;
    String items = data.get(position);


    BHFragment bhFragment = new BHFragment();
    bhFragment.setDetail(items);
    fragment = bhFragment;

    if (fragments[position] == null) {
        fragments[position] = fragment;
    }
    return fragments[position];
}

@Override
public int getCount() {
    if (data != null) {
        return data.size();
    } else {
        return 0;
    }
}

}

BHFragment.java

public class BHFragment extends Fragment {

private TextView tvDetailFragment;
private String detail;

@Override
public View onCreateView(LayoutInflater inflater,  ViewGroup container,  Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_layout, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    tvDetailFragment = (TextView) view.findViewById(R.id.house_txt1);
    tvDetailFragment.setText(getDetail());
}

public String getDetail() {
    return detail;
}

public void setDetail(String detail) {
    this.detail = detail;
}

}

Ich hoffe ihr könnt mir dabei helfen und das ist keine zu Umfangreiche Frage!

— geändert am 30.04.2018, 11:01:26

Kommentieren
Jokel
  • Forum-Beiträge: 1.527

30.04.2018, 07:26:47 via Website

Hallo,
Wo oder bei was hängt es? Beschreibe mal bitte etwas genauer.

Frage welches Layout ist das was du in der Fragment Klasse läds? Sieht für mich so aus als ob dies das Bild von oben ist. Zu dem Bild sieht für mich aus aus, als ob du drei Layouts hast in dehnen du den Text und das Image einfügen willst. Das sollen bestimmt die inneren Platzhalter darstellen.
Meiner Meinung nach bruacht das Layout was du in der Fragmentklasse lädst nur einmal den Text und Image enthalten. Denn es wird ja vom Pager mehfar in dein Activity Lauout geladen.

Wie gesagt beschreibe dein Problem etwas genauer. Villeicht sind die Layout Datein auch hilfreich.
lg J

— geändert am 30.04.2018, 07:28:52

Hilfreich?
Kommentieren
Simon2202
  • Forum-Beiträge: 9

30.04.2018, 11:04:15 via Website

Ich hab meinen Beitrag jetzt etwas bearbeitet um es genauer zu erklären.

Es geht mir darum, dass ich den Code für die Fragment Activity und den Adapter aus einem Tutorial habe, jedoch nicht verstehe wie ich es richtig umschreiben muss, damit es funktioniert.

Den Fragment Layout Code würde ich gerne posten, lässt androidpit aber wegen externer Links anscheinend nicht zu -.-.

Es sind 3 normale ConstraintLayouts, mit jeweils einem ImageView und einem TextView in ihnen.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

30.04.2018, 11:41:16 via Website

Wieso drei oder soll der Pager immer drei Texte und images einfügen.?
Von wo ist das tutorial?

Hilfreich?
Kommentieren
Simon2202
  • Forum-Beiträge: 9

30.04.2018, 11:51:52 via Website

Das siehst du oben auf dem Screenshot den ich von meinem Fragment hinzugefügt habe:

Diese 3 Boxen mit dem hellblauen Hintergrund sind 3 ConstraintLayouts, in jedem dieser 3 ConstraintLayouts befinden sich JEWEILS ein Image und ein TextView (Dunkelblau eingerahmt). Jetzt generiere ich die Daten der Häuser, wobei die Daten des Ersten Hauses in das Erste ConstraintLayout auf der Ersten Seite des ViewPagers eingefügt werden soll. Und so weiter.

www -- androidbie -- com/2017/08/android-create-dynamic-fragment-on.html

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

30.04.2018, 12:55:02 via Website

So habe mir das Tutorial mal angesehen. Du hast da ja noch nicht viel verändert.
Allso gehe ich richtig in der annahme das du mit jeder Pager Seite genau die Grafik von oben befüllt haben willst.
Im Tutorial ist es nur ein String (Text) der in das Fragment eingetragen wird bei dir würden es drei Texte und drei Bilder sein. Richtig?
Wenn demm so ist reicht die einfache Liste von Strings nicht aus.
private List listItem = new ArrayList<>();

Da wäre vielleicht eine Liste mit String Arryas sinnvoll.
auch für die Bilder wäre eine Array Liste notwendig.

Natürlich musst du dazu auch deinen Adapter und daiene Fragmentklasse
anpassen.
Im Fragmet werden die Daten in der Methote setDetail übergeben.

im Adapter bei "dinamisFragment.setDetail(items);"
da müsstest du alle drei texte und Bilder übergeben.

auch musst du den Kostruktor des Adapers ändern der nun deine zwei Listen Übergeben bekommt.
So da wären erst mal die wichtigsten Punkte zum ändern.
Versuche es erst mal selber. Werde dir auch helfen nur wenn ich dir den Code anpasse bringt dir das denke ich wenig.
LG J

— geändert am 30.04.2018, 13:43:05

Hilfreich?
Kommentieren