Android, вызывающий просмотр объекта из кода - PullRequest
1 голос
/ 24 октября 2011

Я новичок, поэтому извините, если этот вопрос слишком простой или слишком сложный.

У меня есть этот код в моем Java-файле:

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

это вызывается, когда кто-то нажимает кнопку изображения в моем XML-файле, но как я могу вызвать это из самого файла Java? Потому что он ожидает объект View ... и я предполагаю, что мне нужно его воссоздать? Как?

Edit:
Хорошо, чтобы уточнить, я хочу иметь возможность вызывать вышеупомянутую функцию через щелчок в моем 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 ]

4 голосов
/ 24 октября 2011

В вашем ImageButton вы должны добавить атрибут: android:onClick="button_baby_clicked" В java-файл вы добавили:

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

Логика заключается в следующем: После нажатия на кнопку image image, этот метод автоматически получитcall, то есть аргумент "v" будет иметь графическую кнопку ur.

Преимущество такой передачи: You no need to initialize the imagebutton in ur activity and no need to set click listener too for this imagebutton.

3 голосов
/ 24 октября 2011

Хорошо, если вы хотите, чтобы метод вызывался при каждом щелчке по представлению, делайте то, что говорили другие.

В качестве альтернативы, вы можете сделать что-то подобное.

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 в той же области действия, что и метод, и передайте ее, как и любой другой метод.Может даже быть нулевым, если метод способен обработать его.

1 голос
/ 24 октября 2011

Я считаю, что лучше всего, если вы реорганизуете код и помещаете код в обработчик событий в глобальный метод, который можно вызывать из любого места.например:

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() где угодно и когда угодно.

1 голос
/ 24 октября 2011

Разве вы не можете использовать его как -

mButton.setOnClickListener(new OnClickListener{

       @Override
       public void onClick(View v) {

           button_baby_clicked(v);
       }      
  }
);  

??

РЕДАКТИРОВАТЬ:

Если вам нужно вызвать someFunction () с помощью onClick кнопки, а оттуда вам нужно вызвать button_baby_clicked (), вам нужно получить объект View v в someFunction. Эта ссылка может помочь вам. Пожалуйста, обратитесь Запустите сервис на onClick . Вы можете изменить соответствующим образом.

...