Android-单击ListView中的元素时更改FAB图标



我在包含一些歌曲的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_。

请记住,您永远不应该自己创建活动实例。这是框架的一个角色,而不是你的。