Comment faire pour Actualiser ListView dans le Fragment qui est rempli avec de BaseAdapter?

Je veux Actualiser une ListView dans un Fragment lorsqu'une boîte de Dialogue est fermée. Jusqu'à présent, l'actualisation ne fonctionne que lorsque je redémarre l'appli et je ne sais pas vraiment pourquoi.

Voici les classes:

C'est le Fragment avec la liste sur elle, que je veux actualiser, lorsque la boîte de Dialogue est fermée.

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<?> 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();
}
}

Et c'est l'Adaptateur que j'ai compléter la Liste avec:

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;
}
}

Et c'est la Principale qui tient le tout ensemble:

Lorsque le positv Bouton de la boîte de Dialogue est enfoncée, puis les nouvelles Données sont ajoutées à la Base de données que je veux

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 && 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 & 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 & 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();
}

de voir dans la liste "derrière" la boîte de dialogue. J'ai essayé beaucoup de choses, mais j'ai vraiment pas l'obtenir. J'espère que vous pourrez m'aider.

Merci 🙂

  • Ce n'est pas une bonne idée de charger les données dans le thread de l'INTERFACE utilisateur. Jetez un oeil à CursorLoader (developer.android.com/reference/android/content/...) ou personnalisé AsyncTaskLoader. Tout simplement de résoudre votre problème, vous devez créer une nouvelle instance de votre adaptateur et de le régler à la liste
InformationsquelleAutor wirthual | 2013-06-07