【问题标题】:Pass intents between fragments在片段之间传递意图
【发布时间】:2013-04-19 08:36:45
【问题描述】:

我想将一个从一个选项卡传递到另一个选项卡的意图。当我在第一个片段中按下一个按钮时,我希望它引导我到另一个片段(例如活动)。是否有另一种方法可以在类似于 startActivity(new Intent(EntryTab.this, Journals.class)); 的片段中执行此操作?下面是我的代码,startActivity 行显示错误。请帮忙!

public class EntryTab extends Fragment{
    public static final String LOGTAG = "BALANCE";
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        final LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.entries, container, false);
        Button save = (Button) ll.findViewById(R.id.entriesButton);
        save.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                BalanceApp myapp= (BalanceApp) getActivity().getApplicationContext();
                DataSource datasource = myapp.datasource;
                datasource.open();

                Log.i(LOGTAG,"inside tab entry");

                EditText amount = (EditText) ll.findViewById(R.id.amount);
                int amt = Integer.parseInt(amount.getText().toString());

                 EditText debit = (EditText)ll.findViewById(R.id.debitText);
                 String dr = debit.getText().toString();

                 EditText credit = (EditText)ll.findViewById(R.id.creditText);
                 String cr = credit.getText().toString();

                 datasource.createEntry(dr, "DR", amt);
                 datasource.createEntry(cr, "CR", amt);

                 Cursor c=datasource.database.rawQuery("SELECT * FROM entries", null);
                 c.moveToFirst();
              //   Log.i(LOGTAG, dr + " " + amt + " " + cr );// the last row

                 Log.i(LOGTAG, c.getString(0) + " " + c.getString(1) + " " + c.getString(2) );// shows always the first row
                 datasource.close();

                 startActivity(new Intent(EntryTab.this, Journals.class)); // error: the constructor intent is undefined.

        }
    });
    return ll;      
}
}

【问题讨论】:

    标签: android-intent android-fragments


    【解决方案1】:

    一个活动可以有很多片段。在片段中,您可以通过getActivity() 方法获取活动。

    此外,要从活动 A -> 活动 B,我们使用意图。 同样,要从 Fragment A -> Fragment B,在 Activity A 中,我们使用 FragmentTransactions。

    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    Fragment f = new CustomFragment();
    fragmentTransaction.add(R.id.fragment_container, f);
    fragmentTransaction.commit();
    

    另外,使用addToBackStack()方法,以便在backpress时从片段B返回片段A。

    【讨论】:

    • Eclipse 在 getSupportFragmentManager() 函数上显示错误,因为类型类未定义。这是在扩展片段或其他东西的类中吗?谢谢
    • 由于 Honycomb 中引入了 Fragment,因此您需要使用兼容性包才能在旧设备上进行反向兼容。请检查您是否有 android-support-v4.jar。它可以通过右键单击您的项目 -> Android 工具 -> 添加支持库来添加。
    • 我确实有 android-support-v4.jar。除了片段之外,我是否需要扩展或实现任何其他类?我的类扩展了 Fragment,我想在 OnClick() 方法中使用 FragmentTransaction,这样当用户单击按钮时,它会跳转到另一个选项卡。它仍然无法识别 getSupportFragmentManager() 或 CustomFragment()。
    • 详细实现请查看ApiDemos。
    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多