【问题标题】:Go from second fragment inside fragment activity to second fragment inside another activty从片段活动中的第二个片段转到另一个活动中的第二个片段
【发布时间】:2015-03-12 16:59:34
【问题描述】:

我的应用程序的某些部分的场景如下:

我遇到的问题是,我在EnterChildExpFragment。我想去ChildDetailsFragment(在 ChildExpensesActivity 中)。

我不能在这里分享整个代码。但我可以告诉我到目前为止我一直在做的一些事情,以便从EnterChildExpFragment 转到ChildDetailsFragment。 首先我尝试了:((MainActivityExpenses)getActivity()).setCurrentItem(1, true); 但这显示了一个错误:cannot cast fragmentactivty to activity

然后我尝试了:

ChildDetailsFragment childDetailsFragment = new ChildDetailsFragment();
FragmentTransaction fragTransaction=getFragmentManager().beginTransaction();
fragTransaction.replace(R.layout.child_details_fragment_layout,childDetailsFragment);
fragTransaction.addToBackStack(null);
fragTransaction.commit();

但这也显示错误:No view found for id 0x7f...

注意:请不要建议我使用更改设计或将EnterChi... 片段合并到ChildExpenseActivity 中。

我在没有使用parent-child 片段概念的情况下制作了嵌套片段。

更多信息:在ChildExpenseActivity 中,我使用了Viewpager 并在FragmentStatePagerAdaptergetItem 方法中加载了片段。 AddChildFragmentActivity 是一个 FragmentActivity,在 ActionBar 中有标签。

TIA!

【问题讨论】:

  • 请分享您的代码
  • 我无法分享我的代码。我几乎没有解释我在问题中所做的事情
  • 我想去 ChildDetailsFragment(在 ChildExpensesActivity 中)。 - 开始一个新的 Intent 去ChildExpensesActivity 并在其onCreate() 回调中显示@987654341 @片段。您不能在来自不同活动的片段之间进行交易(或混合)。

标签: android android-fragments android-fragmentactivity


【解决方案1】:

在绞尽脑汁做了一些“jugaad”之后,我终于得到了我想要的。

EnterChildExpFragment我写了这段代码sn-p:

MainActivityExpenses.myBoolean=true;
Intent myIntent = new Intent(viewEnterChildExp.getContext(), MainActivityExpenses.class);
myIntent.putExtra("fromEnterChildExpToMainActivityExpenses", "true");
startActivity(myIntent);
getActivity().finish();


ChildExpenseActivity

public static Boolean myBoolean=false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_expenses);

    viewPagerMainActivityExpenses = (ViewPager) findViewById(R.id.viewPagerExpenses);
    viewPagerMainActivityExpenses.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));

//        try {

        if (myBoolean) {
//                myBoolean = getIntent().getExtras().getBoolean("fromEnterChildExpToMainActivityExpenses");
            myBoolean=false;
            viewPagerMainActivityExpenses.setCurrentItem(1,true);
        }
    /*} catch (Exception e) {
        Log.e("intent error","is : "+e.toString());
    }*/
}
private class MyPagerAdapter extends FragmentStatePagerAdapter {
    public MyPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0: {
                return ChildFragment.newInstance();
            }
            case 1: {
                return ChildDetailsFragment.newInstance();
            }
            case 2: {
                return SomeFragment.newInstance();
            }

            default: {
                return SomeDefaultFragment.newInstance();
            }
        }
    }

    @Override
    public int getCount() {
        return 3;
    }
}

public void setCurrentItem(int item, boolean smoothScroll) {
    viewPagerMainActivityExpenses.setCurrentItem(item, smoothScroll);
}

【讨论】:

  • PS.: ChildExpenseActivityChildExpenseActivity 是一样的。我错误地互换了它。我想在任何人感到困惑之前让我们知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多