0

そのため、ユーザーが年/月 (クレジット カードの場合) を選択できるダイアログ ボックスが必要です。ユーザーがダイアログに対して [OK] をクリックすると、ホスト (つまり、ダイアログを作成したアクティビティ) に変更が通知されます。

アプリケーションが SDK バージョン 7 で動作する必要があるため、ここで提案されているように DialogFragment を使用できません: http://developer.android.com/guide/topics/ui/dialogs.html

現在、これは私が得たものです:

public class DatePicker {

    /* The activity that creates an instance of this dialog fragment must
     * implement this interface in order to receive event callbacks.
     * Each method passes the DialogFragment in case the host needs to query it. */
    public interface DatePickerListener {
        public void onDialogPositiveClick(int month, int year);
        public void onDialogNegativeClick();
    }

    // Use this instance of the interface to deliver action events
    static DatePickerListener mListener;

    public static void show(Activity listner) {
        mListener = (DatePickerListener)listner;
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder((Activity)mListener);
        LayoutInflater inflater = listner.getLayoutInflater();

        builder.setView(inflater.inflate(R.layout.date_picker, null))
               .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                   @Override
                   public void onClick(DialogInterface dialog, int id) {
                       mListener.onDialogPositiveClick(11, 11);
                   }
               })
               .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       dialog.cancel();
                   }
               }


            );  
        // Create the AlertDialog object and return it
        builder.create();
        builder.show();
    }

}

および XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="15dp" >

    <Spinner
        android:id="@+id/spinnerMonth"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <Spinner
        android:id="@+id/spinnerYear"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

</LinearLayout>

したがって、私には2つの問題があります.1つ目は、onClickダイアログでスピナーの値を取得できないように見えることです.2つ目は、スピナーの内容をプログラムで設定する必要があり、その方法もわかりません(できないのでダイアログの内容を適切に取得しているようです)。

誰かが私を正しい方向に向けることができますか? とても有難い!

4

1 に答える 1

0

まず第一に、私が今まで見たクレジット カードの実装は、電話、コンピューター、またはどこでも、すべての要素が 1 つのウィンドウに含まれています。ユーザーが最も期待するエクスペリエンスを、ポップアップ ダイアログを含むものに変更してもよろしいですか?

アクティビティ自体に必要なすべての入力 (クレジット カード番号のテキスト フィールド、日と月の 2 つのスピナー、CVS テキスト フィールド) があれば、あなたにとっても彼らにとっても簡単ではないでしょうか。小さな画面のモバイルでもスペースが不足します。

あなたが自分の考えに固執しているかどうかにかかわらず、答えは同じままです。次のようなものです。

class something {
  int mMonth;
  int mDay;
  (...)
monthSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
  @Override
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    mMonth = pos;   
  }
  @Override
  public void onNothingSelected(AdapterView<?> parent) { }
});
于 2012-10-16T16:09:39.660 に答える