2013-07-22 6 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 (это); в init(), достаточно ... Если нет, можете ли вы предложить коды? – JackZ

+0

вам нужно добавить OnClickListener в свою активность – 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

Привет, спасибо за фрагмент, уточнить: Моя кнопка уже существует. Я разместил его с помощью редактора графических макетов. Я думаю, что проблема заключается в том, чтобы связать эту уже отформатированную кнопку с моим 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

Смежные вопросы