当用户单击“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();
}
}
}
}
};
}
答案 0 :(得分:0)
您无法关闭片段,只能将其删除,或关闭包含的活动。
要删除片段,请尝试:
getActivity().getFragmentManager()
.beginTransaction()
.remove(this)
.commit();
或者您可以使用以下命令关闭包含的活动
getActivity().finish();
编辑:当你在Activity中定义Handler而不是我之前假设的Fragment中时,第一个代码应该像这样改变:
getFragmentManager()
.beginTransaction()
.remove(fragment)
.commit();
这将从活动中删除片段,但它不会重新调用onCreate方法,因为您的活动保持与以前相同。如果您想再次运行Activity的onCreate,则必须再次启动Activity(使用startActivity()/ startActivityForResult)并完成当前运行的实例。