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