2013-07-22 84 views
0

此路過這裏參數我發瘋...巴頓Costructor

我想通過一些參數通過按鍵構造

我確實創造了myButton的伸長按鈕:

package com.canbluetoothinterface.utilities; 

import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 
import android.view.View.OnClickListener; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class myActivityStartButton extends Button implements OnClickListener { 

protected EditText[] Array; 
private String Name; 
private String BufferName; 
private Activity activityinstance; 
public String[] sValues; 
Class<?> cls; 
private Method m; 


public myActivityStartButton(String Name, Class<?>clsin, Context context) { 
    super(context); 
    cls = clsin; 
    activityinstance = (Activity) context; 
    setId(mygetId()); 
    this.Name = Name; 
    init(); 

} 

private void init(){ 
    setOnClickListener(this); 
} 

public myActivityStartButton(String Name, Class<?>clsin, Context context, Method min) { 
    super(context); 
    this.cls = clsin; 
    this.Name = Name; 
    this.m = min; 
    activityinstance = (Activity) context; 
    setId(mygetId()); 
    setTag(findViewById(mygetId())); 

    init(); 

} 

@Override 
public void setId(int id) { 

    super.setId(id); 
} 

private int mygetId() { 
    int id = 0; 
    BufferName = Name; 
    id = activityinstance.getResources().getIdentifier(BufferName, "id", activityinstance.getPackageName()); 
    return id; 
} 

@Override 
public void onClick(View v) { 
    try { 
     m.invoke(null, (Object)null); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Intent intent = new Intent(activityinstance, cls); 
    activityinstance.startActivity(intent); 

} 


} 

在我的活動我打電話:

Start = new myActivityStartButton("act_testdriveconfiguration_btn_start", DeviceListActivity.class, this, mstartbutton); 

但我的OnClick從未被稱爲... 我在做什麼錯?

謝謝

+0

您是否添加了onClickListener? –

+0

我以爲setOnClickListener(this);在init()中,就足夠了... 如果不是,你可以請提供codesnippet嗎? – JackZ

+0

你必須在你的活動 – hardartcore

回答

1

1.double檢查你的init()被調用。

以下代碼適用於我。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    RelativeLayout layout = (RelativeLayout) findViewById(R.id.main_container); 

    SomeButton btn = new SomeButton(this); 

    layout.addView(btn); 
} 


private class SomeButton extends Button implements OnClickListener { 

    public SomeButton(Context context) { 
     super(context); 

     init(); 
    } 

    private void init() { 
     setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 

     Log.w("log", "click"); 
    } 

} 

注:

如果XML創建你的按鈕,你需要這些構造。

public setParams(String Name, Class<?>clsin,etc params) 
    { 
    //saving params 
    } 

    public SomeButton(Context context) { 
     super(context); 

     init(); 
    } 

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

     init(); 
    } 

    public SomeButton(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 

     init(); 
    } 
+0

嗨,謝謝你的提示,澄清: 我的按鈕已經存在。我已將它與圖形佈局編輯器一起放置。我認爲問題是將這個已經定義好的Button連接到我的myActivityStartButton。通常我用Button somebutton =(Button)findviewByid(R.id.somebutton)來做這件事。但我不能使用它,因爲我需要構造函數來傳遞參數 – JackZ

+0

,如果你把你的按鈕放在xml文件中,爲什麼你要寫這段代碼?Start = new myActivityStartButton(「act_testdriveconfiguration_btn_start」,DeviceListActivity.class,this,mstartbutton );這將得到一個新的實例 – kvh

+0

我知道我創建了一個新的實例,但我還可以如何預定義onClick按鈕的操作?我想要做的是用xml向佈局添加一個按鈕。然後聲明,如果按鈕被點擊,一個新的活動開始。我知道我可以在活動本身做到這一點,但我不想每次都寫... 我只是想將對象連接到xml ... – JackZ