如何编辑打开后由同一片段中的片段打开的Activity中的值

时间:2017-01-20 16:46:18

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

我从父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活动来访问类方法。谢谢!

3 个答案:

答案 0 :(得分:0)

不要使用new ...

创建活动

将优惠券对象传递给您的活动,如下所示:

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()

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

答案 1 :(得分:0)

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....
}

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

答案 2 :(得分:0)

您可以使用“putExtra”

在两个活动之间传递数据
Intent intent = new Intent(getBaseContext(), IndividualCouponActivity.class);
intent.putExtra("COUPON_COMPANY_NAME", coupon.getCompanyName());
startActivity(intent);