Android,从代码中调用视图对象

时间:2011-10-24 12:23:00

标签: java android views

如果这个问题过于简单或太难,我可以成为一名新手,请原谅。

我在我的java文件中有这段代码:

public void button_baby_clicked(View v) 
{
//do something here
}

当有人点击我的xml文件中的imagebutton时会调用它,但是如何从java文件本身调用它? 因为它期待一个View对象......我猜我需要重新创建它?怎么样?

修改
好的,澄清一点,我希望能够通过点击我的xml文件以及它下面的函数来调用上面的函数。 例如:

    public void button_baby_clicked(View v) 
    {
    //do something here
    }

 public void someFunction() 
    {
    x = 10;
    button_baby_clicked(); // This should call the above function.
    }

4 个答案:

答案 0 :(得分:4)

在你的ImageButton中你必须添加一个属性:android:onClick="button_baby_clicked" 在java文件中,您添加了:

public void button_baby_clicked(View v) 
{
//do something here
}

这背后的逻辑是: 单击你的图像按钮后,这个方法将自动被调用,即“v”参数将有你的图像按钮。

这样做的好处是:You no need to initialize the imagebutton in ur activity and no need to set click listener too for this imagebutton.

答案 1 :(得分:3)

好吧,如果你想在每次单击视图时调用该方法,请执行其他人所说的内容。

或者,您可以这样做。

ImageView globalReference;

@Override
public void onCreate(Bundle icicle){
   *** CODE ***
   globalReference = (ImageView) findViewById(R.id.myImageView);
   *** CODE ***
}

然后,只要您希望使用该特定View调用它,只需调用

即可

button_baby_clicked(globalReference);

您也可以使用动态创建的任何View对象执行此操作。

View myTv = new TextView(context);
View myLl = new LinearLayout(context);

button_baby_clicked(myTv);
button_baby_clicked(myLl);

只需在与方法相同的范围内获得有效的View引用,并像其他任何方法一样传递它。如果该方法能够处理它,它甚至可以为null。

答案 2 :(得分:1)

你不能像 -

那样使用它
mButton.setOnClickListener(new OnClickListener{

       @Override
       public void onClick(View v) {

           button_baby_clicked(v);
       }      
  }
);  

...

编辑:

如果你需要从按钮的onClick调用someFunction(),并且从那里,你需要调用button_baby_clicked(),你必须在someFunction中获取View v对象。此链接可能对您有所帮助。请参考Start a service on onClick。你可以适当改变。

答案 3 :(得分:1)

如果你重构代码并将事件处理程序中的代码放入可以从任何地方调用的全局方法,我相信它是最好的。像这样:

public void button_baby_clicked(View v) 
{
  taskToPerform(); // Perform a certain task
}

public void someFunction() 
{
  x = 10;
  taskToPerform(), // Perform the same task again
}

public void taskToPerform()
{
   //This is where you write the task you want to perform
}

通过这种方式,您可以随时随地重用taskToPerform()方法中的代码。