【发布时间】:2016-09-10 07:15:58
【问题描述】:
单击应用栏上的三个按钮时,我必须在我的主要活动中包含三个片段。现在,问题是我想从第二个活动返回到我正在使用 Intent 的 mainActivity 上的特定片段,但在应用程序开始时意图为 null 并获得 nullpointer 异常和应用程序崩溃。
这里是 MainActivity.java
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
FragmentTransaction fragmentTransaction;
HomeFragment homeFrag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
//--------Set and Get Tool Bar-------//
setSupportActionBar(binding.appbar);
getSupportActionBar().setTitle("");
if(getIntent() !=null){
String is = getIntent().getStringExtra("check");
if(is.equals("1")){
SearchFragment searchFrag = new SearchFragment();
if(searchFrag != null){
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragmentContainer, searchFrag)
.addToBackStack(null).commit();
}
}
}else{
homeFrag = new HomeFragment();
if(homeFrag!=null) {
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragmentContainer, homeFrag).commit();
}
}
}
public void MoveToSearchActivity(View view){
SearchFragment searchFag = new SearchFragment();
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragmentContainer,searchFag).commit();
}
public void MoveToHomeActivity(View view){
if(homeFrag!=null) {
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragmentContainer, homeFrag).commit();
}
}
public void MoveToAlertFrag(View view){
AlertFragment alertFragment = new AlertFragment();
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragmentContainer,alertFragment).commit();
}
这是我的 FilterActivity.java,我将从中返回片段:
public class FilterActivity extends AppCompatActivity{
private ActivityFilterBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filter);
//--------------Get ToolBar-----------//
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(" ");
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
Intent homeIntent = new Intent(FilterActivity.this, MainActivity.class);
homeIntent.putExtra("check",1);
startActivity(homeIntent);
break;
default:
break;
}
return true;
}
}
谢谢。
【问题讨论】:
-
您只能从第二个活动移动到第一个活动。您必须在后台管理要加载的片段
-
对不起,我不明白你想说什么请详细说明...
-
当您从第二个活动返回时,您将重定向到第一个活动。传递一些值来通知第一个活动打开哪个片段。这样只有你返回到你想要的片段网络
-
我认为我在使用第二个活动的意图相同的东西,但第一个 Activity 是我的 mainActivity 所以当 ap 启动时它显示 Intent 为 null 并且 nullpointer 异常
-
使用 try catch 来避免这种情况
标签: android android-fragments android-intent android-activity