0

我正在创建一个我想在我的所有活动中出现的菜单。为此,我正在创建一个包含所有按钮定义和 onClickListener 的类。

我遇到的问题是在将后退按钮定义为物理后退按钮时。我创建这个类的方式,它不能识别finish(), onBackPressed()etc.. 函数。那么,这样做的方法是什么?

public class MenuView extends RelativeLayout {

private final LayoutInflater inflater;


public MenuView(Context context, AttributeSet attrs) {
    super(context, attrs);

    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.menu_view, this, true);

    ((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack);
}


private final OnClickListener goBack = new OnClickListener() {
    @Override
    public void onClick(View v) {
        //HERE TO INSERT THE WAY TO DO IT
    }
};
4

4 回答 4

4

应该足以将context属性提取为成员变量并在侦听器中使用它,例如((Activity) context).finish().

于 2013-10-10T10:37:22.000 回答
1

要完成当前的 visible Activity,您将需要它的引用。

试试看,

    public class MenuView extends RelativeLayout {

private final LayoutInflater inflater;
private Activity mActivity;

public MenuView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mActivity = (Activity)context;
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.menu_view, this, true);

    ((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack);
}


private final OnClickListener goBack = new OnClickListener() {
    @Override
    public void onClick(View v) {
    mActivity.finish();
    }
};

我希望它会有所帮助!

于 2013-10-10T10:39:04.270 回答
1

声明一个上下文是一个成员变量,并在你的构造函数中分配它,如下所示:

Context context;

public MenuView(Context context, AttributeSet attrs) {
    super(context, attrs);

    this.context = context;
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.menu_view, this, true);

    ((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack);
  }

在您的点击监听器中,您可以添加这行代码:

((Activity) context).finish();

试试看。希望这会奏效。

于 2013-10-10T10:56:54.080 回答
0

试试这个,onBackPressed() 只需调用这个方法就可以了

 private final OnClickListener goBack = new OnClickListener() {
@Override
public void onClick(View v) {
    //HERE TO INSERT THE WAY TO DO IT

onBackPressed();
}
};
于 2013-10-10T10:33:43.297 回答