- Forum-Beiträge: 27
27.01.2016, 17:48:33 via Website
27.01.2016 17:48:33 via Website
Bei der Entwicklung meiner app stoße ich auf hoffentlich mein vorletztes Problem, Db Inhalte für eine ListView in einem Fragment anzeigen zu lassen.
da ich schon am Anfang damit Probleme hatte, habe ich erstmal versucht die app ohne Fragmente zugestallten.
Jetzt habe ich mich dazu entschieden aus Platzmangel und Design gründen es doch mit Fragmenten anzugehen.
die gesamte app soll generell über verschiedene DatenBanken seine Informationen bekommen.
in der app werden die activitys über die toolbar gewechselt, welche dann ein tabmenu haben und die tabs die Fragmente enthalten mit einem ListView von einer DB.
Das ist das aktuelle Problem.
später soll der User mit den Inhalten der ListView interagieren können so der plan, was wahrscheinlich dann das größte Problem sein wird.
aber bis dahin muss ich erstmal das mit den Fragmenten hin bekommen.
seit tagen versuche ich über google eine Lösung zu finden und stoße größtenteils auf für mich unverständliches, zu altes oder anderen kauderwelsch.
ich hoffe das mir hier vielleicht der eine oder andere wie zuvor helfen kann oder ein tip, tut oder sonstiges hat was mir weiter helfen kann. Vielen Dank
ich lass die ViewPager.class der Tabs und co raus und poste erstmal nur MainActivity und Fragment. sollte jemand andere Dateien anfragen werde ich diese anfrage editieren und hinten mit einfügen. damit es nicht allzu groß wird.
beim Fragment ist mir bewusst das protected void onCreate(Bundle savedInstanceState) nicht funktioniert.
ich habe die Variante über ein tut aus dem Internet und hatte gehofft mit der Fehlerausgabe und google es anzupassen.
meine Hoffnung war, das da es viele gibt die was ähnliches umsetzten wollen, ich einfacher zu einer Lösung komme. LEider habe ich nix verwendbares gefunden um einen Db Inhalt in einem fragment anzeigen zu lassen.
Ich hoffe das hier nicht alle mit den Augen rollen g.
beschäftige mich erst seit ende Dezember mit der app Programierung.
Vielen Dank schon mal.
MainActivity:
public class MainActivity extends AppCompatActivity {
private SQLiteHandler db;
private SessionManager session;
private Button miProfile;
Toolbar toolbar;
ViewPager viewpager;
TabLayout tablayout;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
}
public void onComposeAction(MenuItem mi){
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuHome:
return true;
case R.id.menuAngebote:
Intent intentAngebot = new Intent(MainActivity.this, AngeboteActivity.class);
startActivity(intentAngebot);
return true;
case R.id.menuPAngebote:
Intent intentPAngebot = new Intent(MainActivity.this, PAngebotActivity.class);
startActivity(intentPAngebot);
return true;
case R.id.menuVerlauf:
Intent intentVerlauf = new Intent(MainActivity.this, VerlaufActivity.class);
startActivity(intentVerlauf);
return true;
case R.id.menuProfil:
Intent intentProfil = new Intent(MainActivity.this, ProfilActivity.class);
startActivity(intentProfil);
return true;
}
return onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Tab Menu
viewpager = (ViewPager) findViewById(R.id.viewpager);
ViewPagerMain viewpagermain = new ViewPagerMain(getSupportFragmentManager());
viewpager.setAdapter(viewpagermain);
tablayout = (TabLayout) findViewById(R.id.tablayout);
tablayout.setTabGravity(TabLayout.GRAVITY_FILL);
tablayout.setupWithViewPager(viewpager);
tablayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
fragment classe Main_News.java:
public class Main_News extends Fragment implements RecyclerView.OnScrollChangeListener{
View contentViewMainNews;
private List<News> listNews;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;
private RequestQueue requestQueue;
private int requestCount = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main_news);
recyclerView = (RecyclerView) /*getView().*/findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
listNews = new ArrayList<>();
requestQueue = Volley.newRequestQueue(this);
getData();
recyclerView.setOnScrollChangeListener(this);
adapter = new CardAdapter(listNews, this);
recyclerView.setAdapter(adapter);
}
private JsonArrayRequest getDataFromServer(int requestCount) {
final ProgressBar progressBar = (ProgressBar) /*getView().*/findViewById(R.id.progressBar1);
progressBar.setVisibility(View.VISIBLE);
setProgressBarIndeterminateVisibility(true);
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Config.DATA_URL + String.valueOf(requestCount),
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
parseData(response);
progressBar.setVisibility(View.GONE);
}},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressBar.setVisibility(View.GONE);
Toast.makeText(Main_News.this, "No More Items Available", Toast.LENGTH_SHORT).show();
}
});
return jsonArrayRequest;
}
private void getData() {
requestQueue.add(getDataFromServer(requestCount));
requestCount++;
}
private void parseData(JSONArray array) {
for (int i = 0; i < array.length(); i++) {
News news = new News();
JSONObject json = null;
try {
json = array.getJSONObject(i);
news.setImageUrl(json.getString(Config.TAG_IMAGE_URL));
news.setDatum(json.getString(Config.TAG_DATUM));
news.setNews(json.getString(Config.TAG_NEWS));
} catch (JSONException e) {
e.printStackTrace();
}
listNews.add(news);
}
adapter.notifyDataSetChanged();
}
private boolean isLastItemDisplaying(RecyclerView recyclerView) {
if (recyclerView.getAdapter().getItemCount() != 0) {
int lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
if (lastVisibleItemPosition != RecyclerView.NO_POSITION && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1)
return true;
}
return false;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
contentViewMainNews = inflater.inflate(R.layout.fragment_main_news, null);
return contentViewMainNews;
}
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (isLastItemDisplaying(recyclerView)) {
getData();
}
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
— geändert am 27.01.2016, 18:08:31
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.