0

我创建了一个带有菜单视图的布局,该布局将在其他布局中显示一些按钮。为了定义这些按钮和它们的动作,我创建了一个独立的类来定义它们,这样我就避免了在所有活动中一次又一次地定义它们。

为此,首先我创建了 menu_view 布局:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >


    <!-- Button columns -->
    <RelativeLayout   
        android:id="@+id/border_left"
        android:layout_width="100dip"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:layout_alignParentLeft="true"
        android:background="#000000" >

        <ImageView
            android:id="@+id/radioButton"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_weight="1"
            android:layout_marginTop="60dp"
            android:layout_marginLeft="10dp"
            android:onClick="launch_radio"
            android:src="@drawable/radio_button" />

        <ImageView
            android:id="@+id/musicButton"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_weight="1"
            android:layout_marginTop="200dp"
            android:layout_marginLeft="10dp"
            android:onClick="launch_media"
            android:src="@drawable/music_button" />
        </RelativeLayout>
    </RelativeLayout>

注意:这里不是所有的按钮,我只放了 2 来有个想法。

在此之后,我创建了 MenuView 类,在其中定义了所有这些按钮以及它们的作用:

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.navButton)).setOnClickListener(launch_nav);
    ((ImageView)this.findViewById(R.id.phoneButton)).setOnClickListener(launch_phone);
    ((ImageView)this.findViewById(R.id.webButton)).setOnClickListener(launch_web);
    ((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack);
}

 private final OnClickListener launch_nav = new OnClickListener() {
    @Override
    public void onClick(View v) {
        getContext().startActivity(new Intent(getContext(), Navigation.class));
    }
};

**¡¡¡THROUBLE!!!**
private final OnClickListener launch_phone = new OnClickListener() {
    @Override
    public void onClick(View v) {
        public void launch_phone (String number) {
            String numberToDial = "tel:"+number;
        }
        getContext().startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(numberToDial)));
    }
};

private final OnClickListener launch_web = new OnClickListener() {
    @Override
    public void onClick(View v) {
        getContext().startActivity(new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.google.es")));
    }
};

**¡¡¡THROUBLE!!!**
private final OnClickListener goBack = new OnClickListener() {
    @Override
    public void onClick(View v) {
        getContext().startActivity(new Intent(getContext(), NO.class));
    }
};
}

这是我有点迷路的地方。我必须定义 2 个动作:

1- 电话拨号器 2- goBack 键

电话拨号器我不知道如何在这里定义它。当我第一次创建这个应用程序时,我已经以其他方式定义,它运行良好。但是现在,有很多活动,我必须这样做,这里它显示一个错误,因为这不是这样做的方式它。

使用后退按钮,我只需要定义当按下此按钮时,它必须返回活动,但同样,在这种类型的类中,我不知道如何定义它。

4

1 回答 1

0

听起来好像通过对您的应用程序的快速概述,您正在将代码隔离在最初存在的 Activity 之外,现在这些代码要结构化,以便它们位于要引用的单独类对象中。您在构造类时已经传入了上下文,因此您应该能够保存正在传入的上下文并将其用作 goBack 调用的启动。否则,您将在视图上下文中调用 goBack,并且后退按钮与 Activity 相关联(理想情况下,这是您在创建它时传递给此类的内容),因此您希望将上下文传递给您的视图。

private activityContext;

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

activityContext = context;

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

((ImageView)this.findViewById(R.id.navButton)).setOnClickListener(launch_nav);
((ImageView)this.findViewById(R.id.phoneButton)).setOnClickListener(launch_phone);
((ImageView)this.findViewById(R.id.webButton)).setOnClickListener(launch_web);
((ImageView)this.findViewById(R.id.backButton)).setOnClickListener(goBack);
}

**¡¡¡THROUBLE!!!**
private final OnClickListener goBack = new OnClickListener() {
    @Override
    public void onClick(View v) {
        activityContext.startActivity(new Intent(activityContext, NO.class));
    }
};
}
于 2013-10-09T14:39:23.830 回答