Tôi muốn làm mới một ListView trong một Fragment khi một Dialog được đóng lại. Cho đến bây giờ, tính năng làm mới chỉ hoạt động khi tôi khởi động lại ứng dụng và tôi thực sự không biết tại sao.Làm thế nào để làm mới ListView trong Fragment được làm đầy với BaseAdapter?
Dưới đây là các lớp:
Đây là Fragment với ListView vào nó, mà tôi muốn làm mới, khi Dialog được đóng lại.
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();
}
}
Và đây là Adaptor tôi điền vào danh sách với:
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;
}
}
Và đây là chính chứa tất cả mọi thứ với nhau:
Khi nút positv của Dialog được nhấn, sau đó Dữ liệu mới được thêm vào Cơ sở dữ liệu mà tôi muốn
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();
}
để xem trong danh sáchXem " liên kết "hộp thoại". Tôi đã cố gắng rất nhiều, nhưng tôi thực sự đã không nhận được nó. Hy vọng bạn có thể giúp tôi.
Cảm ơn :)
Đó không phải là ý tưởng tốt để tải dữ liệu trong thread UI. Hãy xem CursorLoader (http://developer.android.com/reference/android/content/CursorLoader.html) hoặc AsyncTaskLoader tùy chỉnh. Để đơn giản giải quyết vấn đề của bạn, bạn cần phải tạo ra thể hiện mới của bộ điều hợp của bạn và đặt nó vào ListView – JustAnotherCoder