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>

注: ここにすべてのボタンがあるわけではありません。

この後、これらすべてのボタンとその機能を定義する 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

アプリケーションの概要を簡単に説明すると、元々存在していたアクティビティの外でコードを分離しているように聞こえますが、これらを構造化して、別のクラス オブジェクトで参照できるようにします。クラスを構築するときにすでにコンテキストを渡しているので、渡されたコンテキストを保存して、それを 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 に答える