0

У меня есть фрагмент, общающийся с активностью. Этот фрагмент имеет несколько кнопок, один из которых - «игра». Я установил onClickListener, когда я нажимаю кнопку, и я также передал интерфейс слушателя активности, чтобы обрабатывать действия после нажатия кнопки.Извлечь представление в OnClickListener

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_header, container, false); 

    play = (Button)view.findViewById(R.id.play); 
    play.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     listener.onButtonPressed(v); 
     } 
    }); 


public interface OnButtonPressedListener { 
    public void onButtonPressed(View v); 
} 

Проблема заключается в том, что после того, как о деятельности, когда я реализовать интерфейс слушателя, это принимает вид «V», что I've передается при нажатии на кнопку. Затем я пытаюсь сравнить это представление, которое я получаю к конкретной кнопке, вызвавшей вызов, просто чтобы убедиться, что кнопка, которую я нажал, поскольку несколько кнопок имеют один и тот же интерфейс. По какой-то причине это сравнение не работает должным образом, но сам интерфейс прослушивателя отлично работает. Не могли бы вы рассказать мне, что я делаю неправильно с этими парнями? Это интерфейс слушателя на моей деятельности:

@Override 
public void onButtonPressed(View v) { 

    HeaderFragment h= new HeaderFragment(); 
     if (v==h.play){ 
      Toast.makeText(this,"View SI",Toast.LENGTH_LONG).show(); 
     if (mediaPlayer!=null){ 

ответ

0

Я предлагаю вам создать различные вызовы для различных кнопок в вашем listener

public ButtinsListener { 
void onPlayClicked() 
void onStop() 
//etc 
} 

Тогда

play.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     listener.onPlayClicked(); 
     } 
    }); 

== является справочным сравнение , т.е. оба объекта указывают на одно и то же место памяти. В вашем случае View v и HeaderFragment h.play - это разные объекты, они не совпадают. Также h.play, вероятно, является нулевым, потому что этот фрагмент не привязан к Activity и не создавал никаких экземпляров его представлений. В любом случае используйте метод, показанный выше.

+0

Спасибо за ответ. Я буду создавать разные вызовы в зависимости от нажатой кнопки. Я знаю, что это решило бы проблему, так как мне больше не придется сравнивать кнопки, но в любом случае, знаете ли вы, как решить проблему, когда я сравниваю представление с объектом фрагмента? –

+0

Во-первых, вы не должны это делать. Я показал вам правильный путь, но если вы все еще хотите использовать только одного слушателя, вы можете сравнить идентификаторы вида. if (v.getId() == R.id.play) {do your stuff} – HellCat2405

+0

Я знаю, но мне нужно было получить представление фрагмента для других задач в будущем, вот почему я спросил. Я использовал ваш ответ, чтобы решить проблему, спасибо! –

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

  • Нет связанных вопросов^_^