0

我在Fragment的內部有一個ListView,其中包含一些歌曲。當我點擊一首歌曲時,我想更改FAB中的圖標(位於Activity),但我不知道該怎麼做。我試着用此代碼:Android - 單擊ListView時單擊更改FAB圖標

片斷:

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異常,我怎麼能解決這個問題?

回答

1

假設你的晶圓廠在你的活動中,你需要一種方法來溝通你的碎片和你的活動。我建議遵循本指南this guide

本質上,您要定義一個接口ActivityController,其中包含您想要在活動內部運行的任何功能。這裏是一個樣機例如:

ActivityController.java - 一個新的界面,你將創建

public interface ActivityController { 
    void setFabImageResource(int resourceId); 
} 

MainActivity.java - 你的活動作爲必要Modifiy。

public class MainActivity implements ActivityController { 
    //The rest of your code 

    public void setFabImageResource(int resourceId) { 
     fab.setImageResource(resourceId); 
    } 
} 

YourFragment.java - 只需modifiy您的片段,像這樣:

mListViewSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      ((ActivityController)getActivity()).setFabImageResource(R.drawable.vector_pause); 
     } 
    } 
+0

它的工作,謝謝! :) – Sabatino

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()後。

請記住,您不應該自己創建活動實例。這是框架的作用,而不是你的。

+0

你可能想補充一點,你承擔的工廠是該片段內。 –

+0

不是。據說它在活動中。我會更新我的答案。 –

+0

呃,我是說我的意思是活動。無論哪種方式,重要的是要指出你正在談論哪一個 –