【问题标题】:How to Move From Activity to Fragment?如何从活动转移到片段?
【发布时间】: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


【解决方案1】:

MainActivity 试试这个,

// Toolbar code
...

int is = -1;
if (getIntent() != null && getIntent().hasExtra("check")) {
    is = getIntent().getIntExtra("check", -1);
}
switch (is) {
    case 1:
        // load SearchFragment
        break;
    case 2:
        // load MoveToAlertFrag
        break;
    default:
        // load HomeFragment
        break;
}

【讨论】:

  • 但是我怎样才能获得按钮点击事件的片段
  • 哪个按钮?它不在给定的代码中。更新代码。
  • 我在我的 XML 上定义了 onClick 属性,例如 MoveToAlert,MoveToSearch 是在按钮单击时调用
  • 点击监听器有什么问题?
  • 谢谢它的作品,,我只是困惑,,,现在一切都好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2015-05-11
相关资源
最近更新 更多