在 OnClickListener 中检索视图
Retrieve view in OnClickListener
我有一个与 activity 通信的片段。此片段有几个按钮,其中之一是 "play"。当我按下按钮时,我已经设置了一个 onClickListener 并且我还将监听器的接口传递给 activity 以在按下按钮后处理操作。
@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);
}
问题是,一旦在 activity 上,当我实现监听器的接口时,它接收到我按下按钮时传递的视图 "v"。然后我尝试将我收到的那个视图与发起呼叫的特定按钮进行比较,只是为了确定我按下了哪个按钮,因为几个按钮共享相同的界面。出于某种原因,这种比较无法正常工作,但侦听器界面本身运行良好。你能告诉我我对这些人做错了什么吗?
这是我 activity:
上的监听器界面
@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){
我建议您为 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 并且未实例化它的任何视图。无论如何使用我上面显示的方法。
我有一个与 activity 通信的片段。此片段有几个按钮,其中之一是 "play"。当我按下按钮时,我已经设置了一个 onClickListener 并且我还将监听器的接口传递给 activity 以在按下按钮后处理操作。
@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);
}
问题是,一旦在 activity 上,当我实现监听器的接口时,它接收到我按下按钮时传递的视图 "v"。然后我尝试将我收到的那个视图与发起呼叫的特定按钮进行比较,只是为了确定我按下了哪个按钮,因为几个按钮共享相同的界面。出于某种原因,这种比较无法正常工作,但侦听器界面本身运行良好。你能告诉我我对这些人做错了什么吗? 这是我 activity:
上的监听器界面@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){
我建议您为 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 并且未实例化它的任何视图。无论如何使用我上面显示的方法。