- Forum-Beiträge: 9
29.04.2018, 13:46:14 via Website
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)
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
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.