【发布时间】:2013-03-09 10:07:59
【问题描述】:
来自活动的代码。我想用FragmentTransaction 将数据传递给ListFragment
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menudisplay);
Bundle extras = getIntent().getExtras();
language = extras.getString("language");
lang_id = extras.getInt("id");
TextView tv = (TextView) findViewById(R.id.tv_lang_use);
//Start passing data
MyListFragment mylist = new MyListFragment();
FragmentTransaction fragmentTrans = getFragmentManager()
.beginTransaction();
mylist.language = language;
fragmentTrans.add(mylist, "language");
Log.d("tes", language +"abc");
fragmentTrans.commit();
}
这是我的片段
编辑(onActivityCreated):
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_menulist_overview, container,
false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
Log.d("Test","How many called?");
new loadcat().execute();
}
public View setUI() {
values = new ArrayList<String>();
try {
if (json.getInt(TAG_SUCCESS) == 1) {
System.out.println("1");
menuresto = json.getJSONArray(TAG_MENU);
String category;
for (int i = 0; i < menuresto.length(); i++) {
System.out.println(menuresto.length());
JSONObject c = menuresto.getJSONObject(i);
// Toast.makeText(getActivity(), c+"",
// Toast.LENGTH_LONG).show();
category = c.getString(TAG_CATEGORY);
values.add(category);
System.out.println(values.get(i));
}
}
} catch (Throwable t) {
Log.e("MyActivity", t.getMessage(), t);
}
updateDetail(values.get(0), values.get(0));
ListView lv = (ListView) view.findViewById(R.id.categoryList);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, values);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos,
long id) {
// TODO Auto-generated method stub
int index = pos + 1;
Toast.makeText(getActivity(), "Click ListItem Number " + index,
Toast.LENGTH_LONG).show();
updateDetail(values.get(pos), values.get(pos));
}
});
return view;
}
public void load() {
String langs = language;
System.out.println("a"+langs+"a");
List<NameValuePair> params = new ArrayList<NameValuePair>();
// Log.d("language load", language);
params.add(new BasicNameValuePair("language", langs));
System.out.println("language = " + langs);
String url = url1;
json = jParser.makeHttpRequest(url, "GET", params);
// ArrayList<String> tes = new ArrayList<String>();
// String[] tes = new String[]{};
Log.d("All Category: ", json.toString());
}
这是我的 Asynctask 类:
class loadcat extends AsyncTask<String, Void, Object> {
@Override
protected Object doInBackground(String... params) {
// TODO Auto-generated method stub
load();
return null;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd = new ProgressDialog(getActivity());
pd.setMessage("tes");
pd.show();
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
// super.onPostExecute(result);
if (pd != null) {
pd.dismiss();
setUI();
}
}
}
asynctask工作前如何处理FragmentTransaction?
因为oncreateview 中的AsyncTask 调用早于fragmentTransaction。在fragmentTransaction 之后,oncreateview 再次调用。并且oncreateview被调用了2次
logcat截图:http://i.stack.imgur.com/4NKBL.png
【问题讨论】:
-
我的回答解决了你的问题吗
-
@DjHacktorReborn :不起作用。还有其他解决方案吗?
-
在 onActivityCreate 中执行所有初始化,而不是在创建时执行,最后运行 asynctask 即可
-
我刚刚在listfragment中做了AsyncTask,包括setUI()和load()。嗯.. 我可以在 onActivityCreated 中创建视图充气器吗?
-
在异步任务之后加载数据时这样做
标签: android android-asynctask android-fragments