Wie Refresh ListView-im Fragment, das gefüllt ist mit BaseAdapter?
Möchte ich zum Aktualisieren einer ListView in einem Fragment, wenn ein Dialog wird geschlossen. Bis jetzt ist das aktualisieren funktioniert nur, wenn ich die app starten und ich weiß wirklich nicht, warum.
Hier sind die Klassen:
Dies ist das Fragment mit der ListView an, dass ich aktualisieren möchten, wenn das Dialogfeld geschlossen ist.
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();
}
}
- Und dies ist der Adapter von dem ich die Liste füllen mit:
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;
}
}
- Und dies ist das Wichtigste, das hält alles zusammen:
Wenn die positv-Button im Dialog gedrückt wird, dann neue Daten zur Datenbank Hinzugefügt wird, möchte ich
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();
}
sehen die Listenansicht "hinter" den dialog. Ich habe schon so viel ausprobiert, aber ich wirklich nicht bekommen, es. Hoffe Ihr könnt mir helfen.
Dank 🙂
InformationsquelleAutor wirthual | 2013-06-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun,
zur Aktualisierung der listView, oder halten Sie die Daten im Speicher mit einem anderen adapter.
BEARBEITEN: Sorry, habe ich nicht gut Lesen deiner Frage das erste mal, schreiben Sie das in Ihren adapter:
InformationsquelleAutor Guillermo Merino
Versuchen ListView.invalidateViews() aktualisieren von Inhalten
Werden Sie sicher, dass Sie die Daten geändert werden, bevor der Aufruf. Datenbank.getAlltitles() - Ergebnis geändert anywhen?
Die seltsame Sache ist, dass, wenn das erste Element Hinzugefügt, und ich schließe die Tätigkeit und starten es erneut, dann funktioniert es. Ich bin wirklich verwirrt.
Ich denke, invalidateView nicht halp, da die Daten einmal geladen in-adapter-Konstruktor. Versuchen Sie, erstellen Sie neue instanse der adapter und setzen Sie ihn anzeigen
InformationsquelleAutor matreshkin
Benutze ich
Interface
Methoden. erstellen Sie eineInterface
KlasseIn Ihrem
Activity
Klasse implementieren, dieInterface
und seine MethodeInnerhalb der Methode nehmen die geänderte Liste und legen Sie auf Ihre
CustomAdapter
Ohk jetzt sind wir im inneren
DialogFragment
KlasseDies ist wichtiger
Innen
onActivityCreated
InformationsquelleAutor Sam