【问题标题】:How to edit the values in an Activity opened by a fragment from the same fragment after it has been opened如何在打开后编辑由同一片段中的片段打开的活动中的值
【发布时间】:2017-01-20 16:46:17
【问题描述】:

我从父 CouponsActivity 中的片段 foodCouponsFragment 打开 IndividualCouponsActivity。我用 Intent 打开 IndividualCouponsActivity。打开后,我想编辑IndividualCouponActivity的textViews和ImageViews。需要注意的是,IndividualCouponActivity 不是片段的父级。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

                Coupon coupon = foodCoupons.get(position);

                Intent foodCouponsIntent = new Intent(getActivity(), IndividualCouponActivity.class);
                startActivity(foodCouponsIntent);

                IndividualCouponActivity activity = new IndividualCouponActivity();

                activity.setValue(coupon.getCouponValue());

                activity.setCompany(coupon.getCompanyName());

                activity.setInfo(coupon.getDescription());

                activity.setPts(coupon.getPts());

                activity.setQr(coupon.getPicImageResourceId());

        }
    });    

但是,当我运行应用程序时,单击 listView 会使应用程序关闭。当时的日志是这样写的:

FATAL EXCEPTION: main
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.support.v7.app.AppCompatDelegateImplBase.

我怀疑这源于我使用新的 IndividualCouponActivity 活动来访问类方法。谢谢!

【问题讨论】:

    标签: java android android-fragments android-intent onclick


    【解决方案1】:

    不要用新的...创建你的活动

    像这样将 Coupon 对象传递给您的活动:

    Intent intent = new Intent();
    Bundle bundle = new Bundle();
    bundle.putParcelable("coupon", coupon); // or putSerializable()
    intent.putExtras(bundle);
    intent.setClass(context, IndividualCouponActivity.class);
    context.startActivity(intent);
    

    onCreate()的活动中,您可以获得通过的优惠券:

    getIntent().getExtras().getParcelable("coupon"); // or putSerializable()
    

    然后将值设置为您的视图。

    【讨论】:

      【解决方案2】:
      listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
      
                  Coupon coupon = (Coupon) adapterView.getItemAtPosition(position);
      
                  Intent foodCouponsIntent = new Intent(getActivity(), IndividualCouponActivity.class);
      
                  Bundle extras = new Bundle();
                  extras.put("value", coupon.getCouponValue());
                  extras.put("companyName", coupon.getCompanyName());
                  extras.put("description",coupon.getDescription());
                  extras.put("pts", coupon.getPts());
                  extras.put("picImageResourceId", coupon.picImageResourceId());
      
                  foodCouponsIntent.putExtras(extras);
      
      
                  startActivity(foodCouponsIntent);
      
          }
      });  
      

      然后在您的 IndividualCouponActivity 的 onCreate 中:

      public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
      
               //get reference to views...
               textViewValue = (TextView) findViewById(R.id.textViewValue);
      
               //do this for all views....
      
      
              //if all objects are String values, if not you know what you have to do...
              //here you get values from extras
      
              Bundle data = getIntent().getExtras();
              String value = data.getStringExtra("value");
              String companyName = data.getStringExtra("companyName");
              String description = data.getStringExtra("description");
              String pts = data.getStringExtra("pts");
              String picImageResourceId = data.getStringExtra("picImageResourceId");
      
      
              //here update UI views
              //example
      
              textViewValue.setText(value);
      
              //do this for all views....
      }
      

      也许有一些拼写错误,但这是解决方案......

      【讨论】:

        【解决方案3】:

        您可以使用“putExtra”在两个活动之间传递数据

        Intent intent = new Intent(getBaseContext(), IndividualCouponActivity.class);
        intent.putExtra("COUPON_COMPANY_NAME", coupon.getCompanyName());
        startActivity(intent);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-23
          相关资源
          最近更新 更多