我正在使用一个片段来显示有关对象的不同信息。在片段的onCreate里面,我从对象中检索一些值并将它们存储在全局变量中:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
String serializedShow = getArguments().getString(SHOW_TO_LOAD);
mShow = (new Gson()).fromJson(serializedShow, Show.class);
mScope = mShow.getScope();
mLanguage = MainActivity.getSystemLanguage();
mLanguage = mLanguage.replace("_", "-");
mId = Integer.valueOf(mShow.getShowId()).toString(); //this line is important
Log.v(LOG_TAG, "DetailFragment onStart, Id is " + mId);
}
如您所见,我为此变量分配了一个特定的ID。我使用日志来检查mId的值是否正确,它是。到目前为止,一切运作良好。 接下来在代码中,用户可以单击一个按钮在浏览器中打开ur url。每次创建此片段时,URls都是不同的(每次此片段显示不同的东西时)
private void fetchIMDBId(){
Log.v(LOG_TAG, "starting IMDBAsyncTask with id " + mId);
new Async4().execute(mId);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_launch:
fetchIMDBId();
return true;
default:
break;
}
return false;
}
正如您所见,fetchIMDBId()被调用。我有一个日志行来检查在onCreate之前设置的mId的值是否相同。 它不是一样的,它是一个完全不同的价值。 具体是该片段在前一个实例中显示的对象的id。
请告诉我我做错了什么。感谢。
E:变量声明
public class DetailFragment extends Fragment {
private static final String LOG_TAG = DetailFragment.class.getSimpleName();
...
private String mScope, mLanguage, mId;
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
}
E:完整来源here
答案 0 :(得分:2)
我相信你没有正确地将你的mId分配给异步任务。您应该将mid应用于异步任务方法,以便调用每个片段的相应mId
private void fetchIMDBId(String mId){
Log.v(LOG_TAG, "starting IMDBAsyncTask with id " + mId);
new Async4().execute(mId);
}
然后调用片段
中的方法fetchIMDBId(this.mId);
答案 1 :(得分:0)
尝试使用this.mId
并检查您的片段对象是否与之前的片段对象相同。
改为呼叫this.fetchIMDBId()
。