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

时间:2016-08-03 20:25:29

标签: android listview android-fragments floating-action-button

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,我该如何解决这个问题呢?

2 个答案:

答案 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);
        }
    }