变量的值与分配的值不同

时间:2016-10-11 12:26:22

标签: java android android-fragments

我正在使用一个片段来显示有关对象的不同信息。在片段的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

2 个答案:

答案 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()