我的应用程序在android弹出菜单下启动新活动时显示错误

我的应用程序在android弹出菜单下启动新活动时显示错误,android,Android,我正在使用holder在其中一个选项卡片段中创建一个listview,在该listview中,我放置了一个按钮以弹出选项,如共享、显示优惠券等。一旦用户单击这些选项中的任何一个,需要启动一个新的活动。 当我点击菜单弹出窗口中的“显示优惠券”选项开始新的活动时,基本上是显示优惠券的图像,我的应用程序崩溃,说“不幸的是,应用程序停止了” 我正在共享适配器和优惠券活动代码以及menu_list.xml。请说明为什么新活动尚未开始。 1.我的适配器类: package com.trillbit.reta

我正在使用holder在其中一个选项卡片段中创建一个listview,在该listview中,我放置了一个按钮以弹出选项,如共享、显示优惠券等。一旦用户单击这些选项中的任何一个,需要启动一个新的活动。 当我点击菜单弹出窗口中的“显示优惠券”选项开始新的活动时,基本上是显示优惠券的图像,我的应用程序崩溃,说“不幸的是,应用程序停止了” 我正在共享适配器和优惠券活动代码以及menu_list.xml。请说明为什么新活动尚未开始。 1.我的适配器类:

package com.trillbit.retail.activity;

import android.content.Context;
import android.content.Intent;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.view.ContextThemeWrapper;
import android.widget.PopupMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

import com.trillbit.retail.R;

/**
 * Created by shashikant.burnwal on 12-29-2016.
 */

public class PlaceAdapter extends ArrayAdapter<Place>{
    final Context mContext;
    int mLayoutResourceID;
    Place mData[]=null;

    public PlaceAdapter(Context context, int resource, Place[] data) {
        super(context, resource, data);
        this.mContext = context;
        this.mLayoutResourceID = resource;
        this.mData = data;
    }

    @Override
    public Place getItem(int position) {
        return super.getItem(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row=convertView;
        PlaceHolder holder=null;
        //row initialization
        if(row==null){
            LayoutInflater inflater=LayoutInflater.from(mContext);
            row=inflater.inflate(mLayoutResourceID,parent,false);
            holder=new PlaceHolder();
            holder.nameView=(TextView)row.findViewById(R.id.nameTextView);
            holder.offerView=(TextView)row.findViewById(R.id.zipcodeTextView);
            holder.imageView=(ImageView)row.findViewById(R.id.imageView);
            holder.menuButton=(ImageButton)row.findViewById(R.id.menu_button);
            row.setTag(holder);



        }else{
            holder=(PlaceHolder)row.getTag();
        }
        Place place=mData[position];
        holder.nameView.setText(place.mPlace);
        holder.offerView.setText(String.valueOf(place.mOffer));
        int resID=mContext.getResources().getIdentifier(place.mImage,"drawable",mContext.getPackageName());
        holder.imageView.setImageResource(resID);


        //menuButton Activity

        holder.menuButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Context wrapper = new ContextThemeWrapper(getContext(), R.style.popupMenuStyle);
                PopupMenu popup = new PopupMenu(wrapper,view);

                popup.getMenuInflater().inflate(R.menu.menu_list,popup.getMenu());
                popup.show();

                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {

                        switch(item.getItemId()){
                            case R.id.share:
                                return true;
                            case R.id.show_coupon:
                                Intent intent = new Intent();
                                intent.setClass(getContext(), CouponActivity.class);
                                Bundle bunde = new Bundle();
                                bunde.putString("coupon","Here is Coupon");
                                intent.putExtras(bunde);
                                getContext().startActivity(intent);
                                return true;
                            case R.id.like:
                                return true;
                            default:
                                return true;

                        }

                    }
                });

            }
        });


        return row;

    }

    private static class PlaceHolder{
        TextView nameView;
        TextView offerView;
        ImageView imageView;
        ImageButton menuButton;

    }
}
  • Menu_list.xml:

    [

    
    
    ]

  • 我还附上了我的应用程序外观的图片:

  • 1) 确保已将CouponActivity作为活动添加到清单文件中

    2) 从非活动类启动新活动时,需要在启动意图之前添加一个标志Intent.flag\u activity\u new\u任务

    holder.menuButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                Context wrapper = new ContextThemeWrapper(getContext(), R.style.popupMenuStyle);
                PopupMenu popup = new PopupMenu(wrapper,view);
    
                    popup.getMenuInflater().inflate(R.menu.menu_list,popup.getMenu());
                popup.show();
    
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
    
                        switch(item.getItemId()){
                            case R.id.share:
                                return true;
                            case R.id.show_coupon:
                                Intent intent = new Intent();
                                intent.setClass(getContext(), CouponActivity.class);
                                Bundle bunde = new Bundle();
                                bunde.putString("coupon","Here is Coupon");
                                intent.putExtras(bunde);
                                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //Needed when starting an activity from a non-activity class
                                getContext().startActivity(intent);
                                return true;
                            case R.id.like:
                                return true;
                            default:
                                return true;
    
                        }
    
                    }
                });
    
            }
        });
    

    第二点解决了我的问题。谢谢!!你救了我一天,两天来一直在挣扎。这么想:)很高兴帮助:)
    <item
        android:id="@+id/like"
        android:title="@string/like"
        app:showAsAction="ifRoom|withText"
        android:visible="true"/>
    
    
    <item android:id="@+id/share"
          android:title="@string/share"
          app:showAsAction="ifRoom|withText"
        android:visible="true"/>
    
    <item android:id="@+id/show_coupon"
          android:title="@string/show_coupon"
          app:showAsAction="ifRoom|withText"
          android:visible="true"/>
    
    holder.menuButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                Context wrapper = new ContextThemeWrapper(getContext(), R.style.popupMenuStyle);
                PopupMenu popup = new PopupMenu(wrapper,view);
    
                    popup.getMenuInflater().inflate(R.menu.menu_list,popup.getMenu());
                popup.show();
    
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
    
                        switch(item.getItemId()){
                            case R.id.share:
                                return true;
                            case R.id.show_coupon:
                                Intent intent = new Intent();
                                intent.setClass(getContext(), CouponActivity.class);
                                Bundle bunde = new Bundle();
                                bunde.putString("coupon","Here is Coupon");
                                intent.putExtras(bunde);
                                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //Needed when starting an activity from a non-activity class
                                getContext().startActivity(intent);
                                return true;
                            case R.id.like:
                                return true;
                            default:
                                return true;
    
                        }
    
                    }
                });
    
            }
        });