2012-06-09 12 views
0

我試圖創建一個可重用的UI類。我承認我不明白它應該如何工作。我想要一個我將參數傳入的類,當用戶做出選擇時,它將返回選定的值。這實際上是一個更復雜的自定義對話框,將被使用。爲了測試,我將來自我發現的例子的以下代碼放在一起,它將所有內容都返回給選定的值。android將變量從類傳回

那麼,如何在主程序中返回用戶選定值?

主模塊 package com.mine.zd;

import android.app.Activity; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

public class ZDialogActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button btn1 = (Button) findViewById(R.id.btn1); 
     btn1.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View arg0){ 
       go(); 
      } 
     }); 
    } 

    private void go() 
    { 
     final String[] vOptions = { "One", "Two", "Three" } ; 

     myOptions.getmenuOptions(
     ZDialogActivity.this, "Select Mode", vOptions, 
      new android.content.DialogInterface.OnClickListener(){ 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Log.w("TEST", "which=" + which); 
       } 
      } 
     ); 
    } 
} 

稱爲模塊

package com.mine.zd; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.util.Log; 

public class myOptions { 

    public static void getmenuOptions(Context context, String msg, 
     String[] vOptions, OnClickListener neutralClickListener){ 

     new AlertDialog.Builder(context) 
     .setTitle("Select Mode") 
     .setItems(vOptions, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) {    
       Log.w("TEST", "item=" + whichButton); 
       dialog.dismiss(); 
      } 
     }) 
     .setNeutralButton("Cancel", neutralClickListener) 
     .create().show(); 
    } 
} 

我得到返回的「取消」按鈕-3價值,但我需要選擇的選項的ID。

+0

而不是在'myOptions.getMenuOptions(...)'方法中調用'setItems(...)'時創建一個匿名'OnClickListener',爲什麼不嘗試將'neutralClickListener'傳遞到'setItems(..) 。)'而不是? – Squonk

回答

1

下面這個怎麼樣:

import android.R; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 

import com.your.package.MyOptions.MyDialogClickListener; 

public class ZDialogActivity extends Activity implements View.OnClickListener, MyDialogClickListener { 

    private MyOptions options; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     findViewById(R.id.btn1).setOnClickListener(this); 

     String[] vOptions = { "One", "Two", "Three" }; 
     options = new MyOptions(vOptions, this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.btn1: 
      go(); 
      break; 
     default: 
      Log.e("TEST", "Unhandled onClick"); 
      break; 
     } 
    } 

    private void go() { 
     options.getMenuOptions(this, "Select Mode"); 
    } 

    @Override 
    public void onMyDialogClick(String option){ 
     Log.d("TEST", "item=" + option); 
    } 
} 

和助手類:

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 

public class MyOptions implements OnClickListener { 

    private final MyDialogClickListener listener; 
    private final String[] options; 

    public interface MyDialogClickListener { 
     void onMyDialogClick(String option); 
    } 

    public MyOptions(String[] options, MyDialogClickListener listener) { 
     this.options = options; 
     this.listener = listener; 
    } 

    public void getMenuOptions(Context context, String msg) { 
     new AlertDialog.Builder(context) 
      .setTitle(msg) 
      .setItems(options, this) 
      .setNeutralButton("Cancel", this) 
      .create() 
      .show(); 
    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     if(listener != null) 
      listener.onMyDialogClick(options[which]); 
     dialog.dismiss(); 
    } 
} 

1)用大寫字母開始你的類名

2)不要使用靜態輔助方法,實例化在這種情況下最好練習

3)您可以通過不改變字段構造

4)使用的接口類之間發送短信(您的活動作爲在對話框onClick事件監聽器)

5)不要使用annoyomous的onClick偵聽器讓你的類實現它並打開視圖id到被點擊的相關區域

希望有所幫助!