ListView
里面有Fragment
,其中包含一些歌曲。当我点击一首歌时,我想要更改FAB内的图标(放在Activity
中),但我不知道该怎么做。我尝试过这段代码:
FRAGMENT:
mainActivity = new MainActivity(); //THIS IS INSIDE onCreate METHOD
mListViewSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mainActivity.fab.setImageResource(R.drawable.vector_pause);
}
}
我在我的Activity中声明我的FAB是公共的,但我仍然得到NullPointerException,我该如何解决这个问题呢?
答案 0 :(得分:1)
只需替换
mainActivity.fab.setImageResource(R.drawable.vector_pause);
通过
fab.setImageResource(R.drawable.vector_pause);
我假设fab
被声明为
FloatingActionButton fab;
并且您将其分配为
fab = (FloatingActionButton) findViewById(R.id.your_fab_id_from_xml);
在setContentView()
中致电onCreate()
后。
请记住,您不应该自己创建活动实例。这是框架的一个角色,而不是你的角色。
答案 1 :(得分:1)
假设您的工厂位于您的活动中,您需要一种方式在您的片段和您的活动之间进行通信。我建议您遵循本指南this guide。
基本上,您希望定义一个接口ActivityController
,其中包含您要在活动中运行的任何函数。这是一个模型示例:
ActivityController.java
- 您要创建的新界面
public interface ActivityController {
void setFabImageResource(int resourceId);
}
MainActivity.java
- 根据需要修改您的活动。
public class MainActivity implements ActivityController {
//The rest of your code
public void setFabImageResource(int resourceId) {
fab.setImageResource(resourceId);
}
}
YourFragment.java
- 只需修改你的片段:
mListViewSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
((ActivityController)getActivity()).setFabImageResource(R.drawable.vector_pause);
}
}