我想在关闭对话框时刷新片段中的ListView。到目前为止,刷新仅在我重新启动应用程序时才有效,我不知道为什么。
以下是课程:
这是带有ListView的片段,当我关闭Dialog时,我想刷新它。
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();
}
}
这是我填充List的适配器:
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;
}
}
这是将所有东西放在一起的Main:
按下对话框的positv按钮,然后将新数据添加到我想要的数据库
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();
}
在listView中查看“后面”对话框。我尝试了很多,但我真的没有得到它。希望你能帮帮我。
谢谢:)
答案 0 :(得分:5)
你可以这样做
public void refresh(){
adapter = new RegisterListAdapter(getActivity());
list.setAdapter(adapter);
}
刷新listView或使用不同的适配器将数据保存在内存中。
编辑:抱歉,我第一次没有读好您的问题,您可以在适配器中写下这个:
public void addNewRow(String row){
this.data.add(row);
this.notifyDataSetChanged();
}
答案 1 :(得分:0)
答案 2 :(得分:0)
我使用Interface
方法。创建一个Interface
类
interface RefreshListview {
fun onValueChanged(myList: ArrayList<ModelTask>)}
在您的Activity
类中实现Interface
及其方法
class MenuAct : AppCompatActivity(), View.OnClickListener,RefreshListview
在方法内部,获取更改后的列表并设置为您的CustomAdapter
override fun onValueChanged(myList: ArrayList<ModelTask>) {
notesAdapter = AdapterTask(this, myList) // handle your own Adapter and listview `static` initilisations
lv_act_menu_daily.adapter = notesAdapter }
好了,现在我们进入DialogFragment
类
private var mCallback: RefreshListview? = null
这是导入和
override fun onAttach(activity: Activity?) {
super.onAttach(activity)
try {
mCallback = activity as RefreshListview?
} catch (e: ClassCastException) {
Log.d("MyDialog", "Activity doesn't implement the RefreshListview interface")
}
}
onActivityCreated
内
try {
// handle your actions
dBHelper.deleteTaskByID(myProg.id!!)
//get the current listview
var daily = dBHelper.readAllTask(Util.getInstance(context).currentTime)
//send it to Interface method
mCallback?.onValueChanged(daily)
dismiss()
}catch (e:Exception){
e.printStackTrace()
}