我在包含一些歌曲的Fragment
中有一个ListView
。当我点击一首歌时,我想更改FAB内的图标(放在Activity
中),但我不知道该怎么做
片段:
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);
}
}
我在我的活动中声明我的FAB是公共的,但我仍然得到NullPointerException,我该如何解决这个问题?
假设你的fab在你的活动中,你需要一种方法来在你的片段和你的活动之间进行通信。我建议遵循本指南。
从本质上讲,您希望定义一个接口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);
}
}
只需更换
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);
在CCD_ 10中调用CCD_。
请记住,您永远不应该自己创建活动实例。这是框架的一个角色,而不是你的。