如何让处理程序关闭片段?

时间:2014-08-11 08:44:31

标签: java android android-fragments android-handler

当用户单击“okay”按钮时,它会将填写完的表单中的信息发送到数据库。然后处理程序将用户添加到数据库中,如果进程成功,那么我希望片段关闭。

根据我尝试的类似问题的建议,

finish()

MyActivity.this.finish()

getActivity().getFragmentManager().popBackStack();

我知道发送的信息是成功的,因为我检查了数据库,但片段视图不会关闭。

if(success.equals("1"))
{
  finish();
}

我希望片段完成,以便MainActivty的onCreate将再次运行。

public class Add extends Activity {

private Fragment fragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hello);


    fragment = new FirstFragment();

    if (savedInstanceState == null) {
        getFragmentManager().beginTransaction()
                .add(R.id.container, fragment).commit();
    }
}


public static class FirstFragment extends Fragment {
    private static EditText first;
    private static EditText last;
    private static Button okay;

    public FirstFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        Add a = new Add();
        View rootView = inflater.inflate(R.layout.fragment_add_student,
                container, false);
        first= (EditText)rootView.findViewById(R.id.first);
        last= (EditText)rootView.findViewById(R.id.last);
        okay = (Button)rootView.findViewById(R.id.okay);
        okay.setOnClickListener(a.new MyOnClickListener());
        return rootView;
    }
}


public class MyOnClickListener implements OnClickListener 
{
    @Override
    public void onClick(View v) 
    {
        ...
        //database
    }
}


final Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        switch(msg.what){
        case DatabaseController.OKAY:
        {
            try{
                JSONObject json_data = new JSONObject((String) msg.obj);
                String success = json_data.getString("success");

                if(success.equals("1"))
                {
                    //finish();             
                }
                else
                {
                    throw new JSONException("Input failed");
                }
            }catch(JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        }
    }
};
}

1 个答案:

答案 0 :(得分:0)

您无法关闭片段,只能将其删除,或关闭包含的活动。

要删除片段,请尝试:

getActivity().getFragmentManager()
    .beginTransaction()
    .remove(this)
    .commit();

或者您可以使用以下命令关闭包含的活动

getActivity().finish();

编辑:当你在Activity中定义Handler而不是我之前假设的Fragment中时,第一个代码应该像这样改变:

getFragmentManager()
    .beginTransaction()
    .remove(fragment)
    .commit();

这将从活动中删除片段,但它不会重新调用onCreate方法,因为您的活动保持与以前相同。如果您想再次运行Activity的onCreate,则必须再次启动Activity(使用startActivity()/ startActivityForResult)并完成当前运行的实例。