大家好我在我的应用程序中创建了2个导航抽屉和2个主要活动(1个用于登录用户,其他用于未登录用户)。现在,当用户登录并希望查看新闻时,它可以很好地打开一个新片段,其中有一个新闻列表,当用户选择特定新闻时,它会打开它的详细信息并且它的工作非常棒。但问题是我在未登录用户的活动中打开新闻详细信息。我设法隔离了这里的问题。
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment fragment = new DetailView();
Integer ID;
ID = listNovosti.get(position).getId();
Bundle bundle = new Bundle();
bundle.putInt("ID", ID);
fragment.setArguments(bundle);
ft.replace(R.id.fragmentlayout, fragment);
ft.commit();
}
问题出在这一行:
ft.replace(R.id.fragmentlayout, fragment);
我正在为已登录用户使用2 frags布局1(fragmentprelayout),其次是fragmentlayout。
我如何在ft.replace周围调整或做一些魔术,以便它可以在这两种布局之间进行选择?
答案 0 :(得分:0)
更好的方法是创建不同的片段并从两个活动中类似地启动它们但是如果您仍想使用相同的片段
以下是如何实现这一目标
首先,您需要使用布尔值
检查正在运行的活动所以在片段中你需要一个像
这样的变量public static Boolean running = false;
class LoginActivity extends Activity {
@Override
public void onStart() {
super.onStart();
Fragment.running = true;
}
}
我们将在其启动时更改片段布局
那就是LoginActivity
正在运行,然后是iflate.LayoutforLoginActivity.xml
其他iflate.layoutforNonLoginActivty.xml
因此,在DetailViewFragment的OnCreateView中,我们将这样做
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView;
if(running) {
rootView = inflater.inflate(R.layout.LayoutforLoginActivity, container, false);
}else {
rootView = inflater.inflate(R.layout.LayoutforNonLoginActivity, container, false);
}
这只是一个黑客,
在这种情况下,您的两个xml必须对所有视图都具有相同的ID,否则您将获得NullPointerException