在Android活动之间分享视图的正确方法?

时间:2014-01-09 04:27:31

标签: java android android-layout android-fragments

我希望能够在不同的Android活动之间共享View。这个视图是一个音乐播放器,我想永远处于每个活动的页脚。我也希望能够从任何类访问它,所以我从我的MainActivity静态引用它。该视图称为Player

我的MainActivity会设置它....

public class MainActivity extends Activity{
public static Player player;

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    MainActivity.player = new Player(this);
}

通过膨胀我的player.xml文件来制作播放器类。

public class Player extends LinearLayout{
private ImageView previousButton, playButton, nextButton, playlistButton;
private TextView songTitle;

public Player(Context context)
{
    super(context);
    init(context);

}


private void init(Context context)
{
    LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.player, this);

    this.previousButton = (ImageView) view.findViewById(R.id.playerPreviousButton);
    this.playButton = (ImageView) view.findViewById(R.id.playerPlayButton);
    this.nextButton = (ImageView) view.findViewById(R.id.playerNextButton);
    this.playlistButton = (ImageView) view.findViewById(R.id.playerPlaylistButton);
    this.songTitle = (TextView) view.findViewById(R.id.playerSongTitle);

}

如何在多个活动中分享这个?我在我的Player类中有很多函数,我没有列出我需要能够从任何类访问,而不仅仅是活动类,因此我虽然采用静态路由并且只进行了一次初始化。

有人可以帮助我让我知道正确的方法吗?

3 个答案:

答案 0 :(得分:1)

如果您只想初始化Player用户界面,请考虑使用 Fragments 代替活动。您可以在屏幕顶部更换各种用户界面,同时保持PlayerFragment有效且不受影响。这也意味着每次用户导航到应用程序的不同部分时,您都不必将UI绑定/取消绑定到音频服务。

答案 1 :(得分:0)

为了您的顾虑,您需要为此定义单独的XML布局。

现在,当您需要在另一个布局中显示XML时,您可以尝试这样...

<include layout="@layout/your_music_layout"/>

只需在您需要的地方进行调整。

其次,要访问它的功能,您应该声明SUPER CLASS。所有其他类将扩展此超类。有点像这样..

Public class MainActivity extends SuperClass{

}

这里你的超级类将扩展Activity,间接将通过你应用程序中所有类的其余部分进行扩展。

就是这样。你很高兴这么做。

答案 2 :(得分:0)

正确的方法是不要在多个活动中共享View。每个视图都属于一个活动,您不应尝试共享它。每个视图都是通过将Context传递给它来构建的,并且它与Context绑定。

您可以为所有活动创建父类,并将必要的代码放在那里。这样您就可以共享代码,但仍然可以创建单独的View对象。