【问题标题】:update fragment from dialogfragment从对话框片段更新片段
【发布时间】:2016-04-11 17:46:01
【问题描述】:

我在片段中使用来自 SQLite 数据库的 textview 文本。现在我想在更新 SQLite 数据库时更新 textview。我正在使用警报对话框来更新 SQLite 数据库。当我单击保存按钮时,数据库会更新,但 textview 在重新加载片段之前不会更新。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    db = new DatabaseHandler(getActivity());
    user = db.getUserDetails();
    setHasOptionsMenu(true);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflating view layout
    View v = inflater.inflate(R.layout.fragment_profile, container, false);

    proName = (TextView)v.findViewById(R.id.proName);
    proChangePassword = (Button)v.findViewById(R.id.proChangePassword);

    proName.setText(user.get("fname") + " " + user.get("lname"));

    return v;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.profile_edit:
            profileEdit();
            return false;
        default:
            break;
    }

    return false;
}


private void profileEdit() {
    final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    final View dialogView = inflater.inflate(R.layout.profile_edit, null);
    dialogBuilder.setView(dialogView);

    eFirstName = (TextInputLayout) dialogView.findViewById(R.id.pEditFirst);
    eLastName = (TextInputLayout) dialogView.findViewById(R.id.pEditLast);
    final Button pEditSave = (Button) dialogView.findViewById(R.id.pEditSave);

    eFirstName.getEditText().setText(user.get("fname"));
    eLastName.getEditText().setText(user.get("lname"));

    dialogBuilder.setTitle("Profile Edit");
    final AlertDialog dialog = dialogBuilder.create();

    pEditSave.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String fname = eFirstName.getEditText().getText().toString();
            String lname = eLastName.getEditText().getText().toString();

            db.updateProfile(fname,lname);
            Toast.makeText(getActivity(), "Your Profile is successfully updated.", Toast.LENGTH_SHORT).show();

            dialog.dismiss();
        }
    });
    dialog.show();
}

如何在点击对话框的保存按钮时自动刷新片段?

【问题讨论】:

    标签: android sqlite android-fragments


    【解决方案1】:

    使用界面概念可以在关闭自定义对话框片段的活动中重新加载片段

    1.定义包含如下方法的接口

    public interface IdialogDismissFragmentReload {
      public void onDismisClick();
      }
    

    2.Fragment A extends Fragment implements IdialogDismissFragmentReload这是你要更新片段的地方

     Fragment A extends Fragment implements IdialogDismissFragmentReload  
      interface 
       {
      ......
      @Override
      public void onClick(View v) {
      FragmentB mFragmentB = new FragmentB ();
      mFragmentB .setListener(this);
      mFragmentB.show(getActivity().getSupportFragmentManager(),PreviewDialog");
    }
    
     @Override
     public void onDismisClick() {
      //  write code you want to
    }
    }
    

    3.在关闭时,它调用Fragment AonDismisClick()方法,您可以编写更新的代码,也可以将所需的数据从B传递到A

    3.FragmentB extends DialogFragment
    {
     private IdialogDismissFragmentReload mIReminderAdded;
    
    public void setListener(IdialogDismissFragmentReload listener) {
        mIReminderAdded = listener;
      }
    
    ........
    
     @Override
     public void onClick(View v) {
     mIReminderAdded.onDismisClick();
     getDialog().dismiss();
    }
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用FragmentonResume 来读取数据库并更新UI。因此将数据库查询和用户更新从onCreate 移动到onResume

      @Override
      public void onResume() {
          super.onResume();
          db = new DatabaseHandler(getActivity());
          user = db.getUserDetails();
      }
      

      只要您关闭Alert DialogonResume 就会被调用并更新数据。

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-05
        相关资源
        最近更新 更多