我正在创建一个带有viewpager的SlidingTab布局的音乐应用。我在主要活动布局的底部包含了一个页脚(就像Google播放音乐一样)。现在每个viewpager片段都包含列表或网格。在点击每个网格/列表项目(比如音乐专辑/流派/艺术家等)时,它会启动一个新活动,显示网格项目的详细信息(歌曲数量等)。但我希望将这项新活动放在页脚上方,并且我不想在每项活动中加入页脚。
我应该用片段替换活动,如果是,怎么做?
请参阅此图片以了解我打算做什么 http://i.stack.imgur.com/fgL0u.png
我的问题是绿色部分屏幕应该是片段吗?如果是,我该如何发布它?
答案 0 :(得分:0)
根据您的要求,您可以在活动布局中添加静态页脚。 Viewpager中的切换器视图可能是不同的碎片。
因此片段会不断变化,页脚会持续存在。有许多教程可用于将片段与活动一起使用。
One could be found here. Also have a look at this one。
更新[根据问题中更新的图片]:可能有很多方法可以实现您提到的用户界面。目前我可以想到这些方式:
footer.xml
并使用<include/>
标记footer.xml
的Singleton类。此单例实例可用于显示持久页脚答案 1 :(得分:0)
页脚应该是碎片。通过fragment标签将它放在xml布局活动中。在onCreateView()中更新您的视图,检查媒体是否正在播放等等。
这样你就可以有一个班级来照顾,没有两面性
也将视图初始化为静态变量可能会有所帮助
希望这会有所帮助:
public class PlayFragment extends Fragment implements MyStaticStreamAudio.OnCompleteListener {
static boolean isPlaying = false;
static ToggleButton play;
static Button next, back;
static TextView titleView;
public PlayFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_play, container, false);
play = (ToggleButton) rootView.findViewById(R.id.tbPlay);
next = (Button) rootView.findViewById(R.id.bNext);
back = (Button) rootView.findViewById(R.id.bBack);
titleView = (TextView) rootView.findViewById(R.id.tvTitle);
if (isPlaying) {
play.setEnabled(true);
play.setChecked(true);
}
play.setOnClickListener(new PlayChangeListener());
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (canNext()) {
goNext();
updateView();
}
}
});
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (canBack()) {
goBack();
updateView();
}
}
});
return rootView;
}
private void goBack() {
MyStaticStreamAudio.goBack();
resetAndPlay();
}
private void goNext() {
MyStaticStreamAudio.goNext();
resetAndPlay();
}
public void pauseMode() {
isPlaying = false;
play.setChecked(false);
play.setEnabled(true);
}
private void resetAndPlay() {
MyStaticStreamAudio.reset();
MyStaticStreamAudio.initializePlayer(getActivity());
MyStaticStreamAudio.play();
}
boolean canNext() {
int current = MyStaticStreamAudio.getCurrentTrack();
return current < MyStaticStreamAudio.getTracks();
}
boolean canBack() {
int current = MyStaticStreamAudio.getCurrentTrack();
return current > 1;
}
public void updateView() {
if (canNext())
next.setEnabled(true);
else
next.setEnabled(false);
if (canBack())
back.setEnabled(true);
else
back.setEnabled(false);
if (play != null) {
play.setEnabled(false);
play.setChecked(true);
}
}
public void startStream() {
isPlaying = true;
updateView();
}
@Override
public void onComplete() {
play.setChecked(false);
progress.setIndeterminate(false);
}
public void playMode() {
play.setEnabled(true);
play.setChecked(true);
}
}