2013-10-21 65 views
0

ViewGroup-class中的一個動態創建的Button(名爲'Controller')我嘗試捕獲一個Click事件以將其重定向到Activity-Context中的Handler。不幸的是,這個事件沒有被激發,或者有點阻止它。沒有從動態創建的子View中的ClickEvent動態創建的子視圖

請仔細看看我的示例代碼(注意:這只是從腦海寫不知道,如果語法是正確的。),要明白我的意思...

活動:

public class Main extends Activity { 
private Controller mController; 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    mController = new Controller(this, mHandler); 
    mController.initControllerViews(); 
} 

private Handler mHandler = new Handler() { 
    public void handleMessage(Message msg) 
    { 
     // ... here I expect the message from clicked view 
        if (msg.obj) { 
         Log.v("XXX", "obj="+msg.obj.toString()); 
        } 
     super.handleMessage(msg); 
    } 
}; 
} 

控制器

public class Controller { 
private Context mContext; 
private Handler mHandler; 

public Controller(Context context, Handler handler) 
{ 
    mContext = context; 
    mHandler = handler; 
} 

public void initControllerViews() 
{ 
    Activity activity = (Activity)mContext; 

    LayoutInflater inflater = (LayoutInflater)activity.getSystemService(LAYOUT_INFLATER); 
    LinearLayout layout = (LinearLayout)activity.findViewById(R.layout.layout1); 
    Button btn = (Button)inflater.inflate(R.layout.Button, null); 
    btn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) 
     { 
          Log.v("XXX", "v="+v.toString()); 
      Message msg = Message.obtain(mHandler); 
      msg.obj = v; 
      mHandler.sendMessage(msg); 
     } 
    }); 
    layout.addView(btn); 
} 
} 

正如你可以看到控制器被規劃爲在預定義佈局內作爲可點擊項目的集合類,並作爲其事件的調度程序。

問題是,即使安裝了onclick-listener,也不會生成點擊事件。

有沒有人有想法,這裏發生了什麼問題,或者我可能忘記實施了什麼?

非常感謝!

+0

什麼好處在這裏創建單獨的控制器? –

+0

handler在這裏創建一個新的線程..所以UI沒有得到更新。 –

+0

onCreate方法的setContentView在哪裏? –

回答

0

好的。最後在家裏,我發現我的錯誤:

LinearLayout layout = (LinearLayout)activity.findViewById(R.layout.layout1); 
Button btn = (Button)inflater.inflate(R.layout.Button, null); 

因此,我做了相當愚蠢的。這是修正:

LinearLayout layout = (LinearLayout)activity.findViewById(R.layout.layout1); 
View itemView = inflater.inflate(R.layout.Button, null); 
Button btn = (Button)itemView.findViewById(R.id.btn1); 
// ... 

希望幫助別人......