【发布时间】:2016-06-01 04:20:58
【问题描述】:
在我的 Android 项目中,我使用的是 TabLayout,我有
Fragment1 --> Fragment2(AlertDialog)
|
button1--- name:
listview Id:
okButton--->AsyncTask
这里,在 Fragment1 中按下 button1 后调用另一个 fragment(Fragment2),然后填写表单按下 okbutton调用AsyncTask从服务器接收数据,然后数据需要显示在Fragment1的
列表视图
我的课:
界面
public interface TaskCompleted {
// Define data you like to return from AysncTask
public void onTaskComplete(Integer result);
}
片段1
public class Fragment1 extends Fragment implements TaskCompleted {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_one, container, false);
btn1 = (Button) view.findViewById(R.id.button1);
listview = (ListView) view.findViewById(R.id.listview);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment picker = new SearchFragment();
picker.show(getActivity().getFragmentManager(), "dialog");
}
});
return view;
}
public static void submit(final String serverResponse) {
@SuppressWarnings("unused")
final class DownloadJSON extends AsyncTask<String, String, Void> {
@Override
protected Void doInBackground(String... params) {
try {
//code to process response
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args) {
//display into adapter
}
}
}
}
片段2
public class Fragment2 extends DialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View content = inflater.inflate(R.layout.dialog_fragment, null);
builder.setView(content);
builder.setMessage("form")
// Positive button
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
new JSONfunctions(getActivity()).execute();
}
});
// Create the AlertDialog object and return it
return builder.create();
}
@Override
public void onTaskComplete(String serverResponse) {
// TODO Auto-generated method stub
}}
异步任务
public class JSONfunctions extends AsyncTask<String, String, String> {
private TaskCompleted mCallback;
public JSONfunctions(Context context){
this.mContext = context;
this.mCallback = (TaskCompleted) context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(mContext);
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected String doInBackground(String... params) {
String serverResponse="";
try {
====code to connect to server===
return serverResponse; (return result)
}
} catch (Exception e) {
e.printStackTrace();
}
return serverResponse;
}
@Override
protected void onPostExecute(String result) {
mProgressDialog.dismiss();
mCallback.onTaskComplete(result);
}
}
在 MainActivity 我也有
@Override
public void onTaskComplete(String serverResponse) {
Fragment2.submit(serverResponse);
}
使用 fragment2 中的这段代码,在按下 okbutton 后,它会调用 asyncTask 并从服务器获得成功的响应..但没有显示到列表视图中..为什么?????
【问题讨论】:
-
ListView 是在 Fragment 中还是在 Activity 中?
-
Fragment1 中的列表视图
-
Preeti,您从哪里添加
Fragment2Fragment?并在MainActivity的onTaskComplete方法中添加日志检查onTaskComplete方法是否被调用 -
我正在使用 viewpager tablayout。其中 Fragment1 是一个选项卡..来自 Fragment1 我将 Fragment2 作为警报对话框调用。从警报对话框我调用 asynctask..现在我想将异步任务值显示到 Fragment1 的列表视图
-
ok 并且
onTaskComplete方法在 MainActivity 中是否被调用?
标签: android android-fragments android-asynctask