Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to Refresh ListView in Fragment that is filled with BaseAdapter?
    text
    copied!<p>I want to Refresh a ListView in a Fragment when a Dialog is closed. Until now the refresh only works when I restart the app and I don't really know why.</p> <p>Here are the classes:</p> <p>This is the Fragment with the ListView on it, that i want to refresh, when the Dialog is closed.</p> <pre><code>public class RegisterListFragment extends Fragment { public static final String TAG = "RegisterListFragment"; RegisterListAdapter adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setRetainInstance(true); // TODO Auto-generated method stub View view = inflater.inflate(R.layout.act_select_list_fragment, container, false); ListView list = (ListView) view.findViewById(R.id.register_list); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView&lt;?&gt; arg0, View arg1, int arg2, long arg3) { Intent i = new Intent(getActivity(), com.example.smartkasse.Act_Register.MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); TextView selectedRegisterTextView = (TextView) arg1.findViewById(R.id.title); String selectedRegisterName = (String) selectedRegisterTextView.getText(); i.putExtra("selectedRegisterName", selectedRegisterName); startActivity(i); getActivity().finish(); } }); adapter = new RegisterListAdapter(getActivity()); list.setAdapter(adapter); return view; } public void refreshData() { adapter.notifyDataSetChanged(); } } </code></pre> <p>And this is the Adapter I fill the List with:</p> <pre><code>public class RegisterListAdapter extends BaseAdapter { View view = null; Database db = new Database(mContext); data=db.getAlltitles(); if(convertView==null) { view = (View) inflater.inflate(R.layout.act__select_listview, null); TextView title = (TextView) view.findViewById(R.id.title); TextView artist = (TextView) view.findViewById(R.id.artist); TextView duration = (TextView) view.findViewById(R.id.duration); ImageView thumb_image = (ImageView) view.findViewById(R.id.list_image); title.setText(data.get(position)); //artist.setText(data.get(position)); //duration.setText(data.get(position)); //thumb_image.setImageResource(R.drawable.ic_launcher); return view; } else { TextView title = (TextView) convertView.findViewById(R.id.title); TextView artist = (TextView) convertView.findViewById(R.id.artist); TextView duration = (TextView) convertView.findViewById(R.id.duration); ImageView thumb_image = (ImageView) convertView.findViewById(R.id.list_image); title.setText(data.get(position)); // artist.setText(data.get(position)); // duration.setText(data.get(position)); //thumb_image.setImageResource(R.drawable.ic_launcher); return convertView; } } </code></pre> <p>And this is the Main that holds everything together:</p> <p>When the positv Button of the Dialog is pressed, then new Data is added to the Database that i want </p> <pre><code>public class MainActivity extends SherlockFragmentActivity implements OnRegisterCreatedListener { RegisterListFragment registerListFragment; HelpFragment helpFragment; boolean helpVisible = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Grund-Layout für die Activity festlegen setContentView(R.layout.act_select_main); addFragments(); supportInvalidateOptionsMenu(); setLargeInLandscape(); } // Was passiert wenn der Menüknopf gedrückt wird // Inflate the menu; this adds items to the action bar if it is present. @Override public boolean onCreateOptionsMenu(Menu menu) { // Zeigt nur die die nicht in Actionbar sind, kann aber eingestellt // werden im XML-File if (helpVisible) { getSupportMenuInflater().inflate( R.menu.act_select_menu_help_visible, menu); } else { getSupportMenuInflater().inflate( R.menu.act_select_menu_registerlist_visible, menu); } return true; } // Was passiert wenn ein Menüpunkt ausgewählt wird @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { // Das wenn der Knopf das Plus war case R.id.menu_help: changeFragment(); // this.supportInvalidateOptionsMenu(); break; case android.R.id.home: changeFragment(); // this.supportInvalidateOptionsMenu(); break; case R.id.menu_add_register: FragmentManager fm = getSupportFragmentManager(); NewRegisterFragment dialog = new NewRegisterFragment(); dialog.setRetainInstance(true); dialog.show(fm, "fragment_name"); break; // Listenelement hinzufügen und dem Adapter sagen es hat sich was // geändert, mach neu } return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub switch (keyCode) { case KeyEvent.KEYCODE_BACK: if (helpVisible = true) { // changeFragment(); helpVisible = false; getSupportActionBar().setDisplayHomeAsUpEnabled(false); supportInvalidateOptionsMenu(); } break; } return super.onKeyDown(keyCode, event); } private void addFragments() { // Zuerst versuchen Fragmente aus dem Layout zu laden registerListFragment = (RegisterListFragment) getSupportFragmentManager() .findFragmentById(R.id.registerListFragment); helpFragment = (HelpFragment) getSupportFragmentManager() .findFragmentById(R.id.HelpFragment); // Wenn die Fragmente nicht im Layout sind, füge sie dynamisch hinzu if (registerListFragment == null &amp;&amp; helpFragment == null) { FragmentTransaction ft = getSupportFragmentManager() .beginTransaction(); registerListFragment = new RegisterListFragment(); helpFragment = new HelpFragment(); ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out, android.R.anim.fade_in, android.R.anim.fade_out); ft.add(R.id.Fragmentframe, registerListFragment); ft.add(R.id.Fragmentframe, helpFragment); ft.show(registerListFragment); ft.hide(helpFragment); ft.commit(); // OnclickListener für Fragmentwechseln } } private void changeFragment() { // Fragmente austauschen FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); if (registerListFragment.isVisible()) { ft.hide(registerListFragment); ft.show(helpFragment); helpVisible = true; supportInvalidateOptionsMenu(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); if (getSupportFragmentManager().findFragmentByTag( "RegisterListFragment") == null) { ft.addToBackStack("RegisterListFragment"); } } else { ft.hide(helpFragment); helpVisible = false; supportInvalidateOptionsMenu(); getSupportActionBar().setDisplayHomeAsUpEnabled(false); fm.popBackStack(); } ft.commit(); } private void setLargeInLandscape() { if ((getResources().getConfiguration().screenLayout &amp; Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); findViewById(R.id.menu_help).setVisibility(View.GONE); } if ((getResources().getConfiguration().screenLayout &amp; Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); findViewById(R.id.menu_help).setVisibility(View.GONE); } } @Override public void OnRegisterCreated() { // TODO Auto-generated method stub registerListFragment.refreshData(); } </code></pre> <p>to see in the listView "behind" the dialog. I tried so much, but i really didnt get it. Hope you can help me.</p> <p>Thanks :)</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload