【问题标题】:Passing data from a class that 'extends activity' to a class that 'extends fragment'将数据从“扩展活动”的类传递到“扩展片段”的类
【发布时间】:2014-02-15 16:55:45
【问题描述】:

我要做的是将在“扩展活动”的类中获得的信息发送到“扩展片段”的类,其中这个“扩展片段”是“PagerAdapter”的一部分

我最初的想法是通过意图将信息传递给“扩展片段活动”的类,然后使用“getActivity().getIntent.getExtras()”将信息传递给适当的片段,但这似乎不是工作,因为信息必须显示在 textView 中。

我的课程显示在下面..

获取用户信息.java

public class ObtainUserInformation extends Activity {

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

public void submitInformation(View view){
    EditText maintenanceTxt = (EditText)findViewById(R.id.obUserInfo_maintenence);
    EditText grantTxt = (EditText)findViewById(R.id.obUserInfo_grant);
    EditText bursaryTxt = (EditText)findViewById(R.id.obUserInfo_bursary);
    EditText barclaysTxt = (EditText)findViewById(R.id.obUserInfo_barclays);
    EditText natwestTxt = (EditText)findViewById(R.id.obUserInfo_natwest);
    EditText hsbcTxt = (EditText)findViewById(R.id.obUserInfo_hsbc);
    EditText walletTxt = (EditText)findViewById(R.id.obUserInfo_wallet);

    String maintenance = maintenanceTxt.getText().toString();
    String grant = grantTxt.getText().toString();
    String bursary = bursaryTxt.getText().toString();
    String barclays = barclaysTxt.getText().toString();
    String natwest = natwestTxt.getText().toString();
    String hsbc = hsbcTxt.getText().toString();
    String wallet = walletTxt.getText().toString();

    if(maintenance.isEmpty()|| grant.isEmpty() || bursary.isEmpty() || barclays.isEmpty() || natwest.isEmpty()
            || hsbc.isEmpty() || wallet.isEmpty()){

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Empty textbox!"); 
        builder.setMessage("Please enter 0.00 for any empty textboxes"); builder.setPositiveButton("OK", null);
        @SuppressWarnings("unused")
        AlertDialog dialog = builder.show();
    }
    else{
        float convMaintenance = Float.valueOf(maintenance);
        float convGrant = Float.valueOf(grant);
        float convBursary = Float.valueOf(bursary);
        float convBarclays = Float.valueOf(barclays);
        float convNatwest = Float.valueOf(natwest);
        float convHsbc = Float.valueOf(hsbc);
        float convWallet = Float.valueOf(wallet);

        Intent intent = new Intent(ObtainUserInformation.this, MainMenu.class);
        intent.getFloatExtra("maintenance", convMaintenance);
        intent.getFloatExtra("grant", convGrant);
        intent.getFloatExtra("bursary", convBursary);
        intent.getFloatExtra("barclays", convBarclays);
        intent.getFloatExtra("natwest", convNatwest);
        intent.getFloatExtra("hsbc", convHsbc);
        intent.getFloatExtra("wallet", convWallet);
        Toast.makeText(ObtainUserInformation.this, "Financial information successfully saved!", Toast.LENGTH_LONG).show();
        startActivity(intent);
        finish();
    }
}

}

这个类所做的是获取用户在 EditText 上的输入,将它们放入变量中,然后通过意图发送这些变量。

MainMenu.java

public class MainMenu extends FragmentActivity{

DBAdapter db = new DBAdapter(this); //Initiate DB class methods
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;

//OnCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_menu);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);   
}

**UNNCESSARY CODE OMMITED**

public void getUserInformation() {
    float maintenance = getIntent().getExtras().getFloat("maintenance");
    float grant = getIntent().getExtras().getFloat("grant");
    float bursary = getIntent().getExtras().getFloat("bursary");
    float barclays = getIntent().getExtras().getFloat("barclays");
    float natwest = getIntent().getExtras().getFloat("natwest");
    float hsbc = getIntent().getExtras().getFloat("hsbc");
    float wallet = getIntent().getExtras().getFloat("wallet");
    EditText maintenanceTxt = (EditText)findViewById(R.id.fragment3_maintenance);
    EditText grantTxt = (EditText)findViewById(R.id.fragment3_grant);
    EditText bursaryTxt = (EditText)findViewById(R.id.fragment3_bursary);
    EditText barclaysTxt = (EditText)findViewById(R.id.fragment3_barclays);
    EditText natwestTxt = (EditText)findViewById(R.id.fragment3_natwest);
    EditText hsbcTxt = (EditText)findViewById(R.id.fragment3_hsbc);
    EditText walletTxt = (EditText)findViewById(R.id.fragment3_wallet);
    maintenanceTxt.setTextSize(maintenance);
    grantTxt.setTextSize(grant);
    bursaryTxt.setTextSize(bursary);
    barclaysTxt.setTextSize(barclays);
    natwestTxt.setTextSize(natwest);
    hsbcTxt.setTextSize(hsbc);
    walletTxt.setTextSize(wallet);
}

MORE UNNECESSARY CODE OMITTED

该类包含一个方法“getUserInformation”,它获取意图、查找 EditText id 并将意图变量设置为此文本字段。

片段3

public class Fragment3 extends Fragment {


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment3, container, false);

    //Set date to TextView
    long date = System.currentTimeMillis();
    SimpleDateFormat sdf = new SimpleDateFormat("MMM d, yyyy");
    String dateString = sdf.format(date);
    TextView t = (TextView) root.findViewById(R.id.textView_date3);
    t.setText(dateString);
    return root;
}

这个类是我希望变量显示在 EditText 框中但努力寻找合适的方法来完成此任务的地方。

使用片段而不是普通的活动类时变得更加困难......

我想要发生的事情的分解是: 1.) 用户在 1 次活动中输入信息 2.) 此信息显示在一个片段中,该片段是 pagerAdapter 的一部分

任何帮助将不胜感激!

【问题讨论】:

    标签: java android eclipse android-intent fragment


    【解决方案1】:

    如果您想在创建 Fragment 时传递数据,请像这样使用 Bundle。

    Bundle args = new Bundle();
    args.putInt("yourStringName", yourSting);
    fragment.setArguments(args);
    

    如果你想从片段联系封闭的活动。您可以使用getActivity 方法获取Activity 实例并调用您要调用的函数。在您的情况下,您甚至可以访问与 FragmentActivity 关联的 Intent 并从中访问额外的值。

    public void putFloat (String key, float value)

    【讨论】:

    • 在我的情况下,我试图传递一个浮点数,这是否仍然以相同的方式工作而不是使用args.putInt("yourStringName", yourString);
    • 我还要在Fragment3 类中使用onCreateView 下的getActivity,还是必须在我的Fragment3 中创建一个使用getActivity 功能的单独方法?
    • 覆盖 onActivityCreated 方法。
    • 如果你能提供一些代码来告诉我如何根据我的结构来实现这个,有可能吗?
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多