我正在开发一个应用程序来显示有关电影/电视节目的详细信息。从搜索结果中打开电影时,它会正确打开。然后我将电影添加到我的收藏中,转到MainActivity,其中列出了我的所有电影。选择相同的电影,但现在隐藏整个AppBarLayout!我没有得到任何类型的例外,在调试中我看到它是可见的,但是高度为0.为什么会发生这种情况?
如果没有找到横幅图像,我有一个折叠CollapsingToolbarLayout的方法,但这不是这里的情况。无论如何,它应该在折叠时具有带标题的工具栏,并在滚动时展开。
DetailActivity的布局:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.NoActionBar"
tools:context=".activites.DetailActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="240dp"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay"
app:layout_behavior="@string/appbar_spring_behavior">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="60dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@null"
android:fitsSystemWindows="true"
android:focusableInTouchMode="true"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.NestedFixFlingScrollView
[...]
DetailActivity中的一些相关设置方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
movieChanges = InterfaceHolder.movieChanges;
findNodes();
setupToolbar();
setupCurrentMovie();
setupImageGallery();
setupFAB();
displayDetails();
fetchTmdbDetails();
}
private void setupToolbar() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
getWindow().setStatusBarColor(Color.TRANSPARENT);
setTitleWhenCollapsed();
}
private void setupCurrentMovie() {
movie = new Gson().fromJson(getIntent().getStringExtra(EXTRA_MOVIE), Movie.class);
if (movie == null) {
Toast.makeText(this, R.string.movie_not_found, Toast.LENGTH_SHORT).show();
finish();
}
}
[...]
从搜索结果中启动DetailActivity:
holder.listItemContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (resultModel.searchResult.isTvShow() || resultModel.searchResult.isMovie()) {
final Movie movie = new Movie();
movie.setTitle(resultModel.displayText);
movie.setYear(resultModel.year);
movie.setFormat(MovieFormat.BLU_RAY);
movie.setType(MediaType.from(resultModel.mediaType));
movie.setPosterPath(resultModel.posterUrl);
movie.setTmdbId(resultModel.searchResult.getId());
final Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra(DetailActivity.EXTRA_MOVIE, new Gson().toJson(movie));
context.startActivity(intent);
}
}
});
从MainActivity开始:
final Movie movie = movieList().get(position);
final Intent intent = new Intent(getApplicationContext(), DetailActivity.class);
intent.putExtra(DetailActivity.EXTRA_MOVIE, new Gson().toJson(movie));
startActivity(intent);
styles.xml:
<resources>
<style name="AppTheme" parent="Theme.AppCompat">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
styles.xml-21:
<resources>
<style name="AppTheme21" parent="AppTheme">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
SearchActivitiy和DetailActivity都使用AppTheme.NoActionBar。 MainActivity使用AppTheme。我现在注意到,当从SearchActivity打开电影时,它正确显示,但如果我按回(搜索)然后再次打开同一部电影,则无法正确显示。
我怀疑是SearchActivity中的这一行造成了麻烦,但事实并非如此:
getSupportActionBar().hide();
似乎只有在使用SearchActivity之后,DetailActivity才能正确显示。 MainActivity中的所有其他示例数据在DetailActivity中正确打开,直到我使用了SearchActivity。甚至一些我没有搜索过的电影。
很抱歉,如果这个问题变得冗长/详细,但我经常看到人们要求提供更多细节,所以我选择包含尽可能多的相关信息。
如果您需要更多信息,请告诉我?
答案 0 :(得分:0)
我明白了! 我正在使用Ion进行图像加载,并且有一个回调方法“collapseAppBarOnError”:
.navbar {
background:rgba(0, 0, 0, 0.65);
}
回调方法中的“else if”导致了麻烦。对不起,因为当我没有发布我的所有代码时,你们不可能看到。
事实证明它实际上与SearchActivity无关,如果我在我的收藏中打开了两次或更多次的电影,即使没有使用搜索,也会发生错误!它第一次正常工作,但不是以下时间。