嗨我正在用glide图像加载器库填充gridview,当他们第一次被调用到我的片段时,他们看起来像这样
但是在上下滚动之后,它们会被调整大小并且看起来像这样
这是我正在使用我的gridview,滑动库,还是像我的占位符图像?在第二个屏幕截图上如果我按下一个图像,它会亮起来显示它实际上填满整个空间,任何人都知道我在这里做错了什么?我试过用centercrop滑动玩这个调用,但似乎没有区别,我不知道如何计算每个单元格的宽度和高度,欢迎任何建议
编辑这里是我如何调用滑翔
Glide.with(getActivity())
.load(mThumbIds[position])
.placeholder(R.drawable.placeholder)
.error(R.drawable.ic_drawer)
.centerCrop()
.override(500,300)
.into(imageView);
Run Code Online (Sandbox Code Playgroud) 我有很多片段,它们以2个标签布局显示,FragmentStatePagerAdapter在每个片段中都有一个Recycler视图,我想在应用栏中使用搜索栏来过滤结果.
首先,我这样做是使用onQueryTextChange listener在onCreateOptionsMenu它工作得很好用几个片段,但是当我加入了执行到其他片段(只是CTRL + C和Ctrl + V)也停止工作,没有结果甚至是用来工作片段我然后在这里读到,最好坚持onQueryTextChange listener in onPrepareOptionsMenu试图避免与invalidateOptionsMenu的问题,但我决定给一个尝试也工作,然后当我将方法添加到我所有的其他片段,但它再次失败,但它确实在一些片段上工作,奇怪的是这些片段恰好全部附加到同一个父片段,但是4个父片段的代码和调用它们的代码是相同的.
我已经阅读的另一种方法是creating an interface通过获取对当前片段的引用从我的主要活动中使用它然后id必须从我的viewpager获取当前显示的片段,我不知道是否有可能任何人都可以权衡这个为了我,
非常感谢
并感谢伟大的编辑大声笑
编辑 尝试接口方法无济于事,虽然我还是初学者,我确实需要找到附加的片段,并且使用fragmentstateviewpager它是不可能的,如果没有使用黑客,必须有一些理由为什么它适用于某些而不是其他的,有时候一点也不
编辑2
所以即时通讯仍然摆弄这个,我几乎没有回复所以让我的肉体这一点,所以我在主要活动中添加菜单布局,像这样
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.dashboard, menu);
SearchView searchView =
(SearchView)menu.findItem(R.id.action_search).getActionView();
SearchManager searchManager = (SearchManager)
getSystemService(SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
return true;
}
Run Code Online (Sandbox Code Playgroud)
然后从onPrepareOptionsMenu中的片段添加一个监听器,就像这样
@Override
public void onPrepareOptionsMenu(Menu menu) {
// Inflate the menu; this adds items …Run Code Online (Sandbox Code Playgroud) 尝试以编程方式切换片段内的tablayout时,我得到一个空指针异常,
所以我的主要活动有一个标签布局(4个标签)每个标签都有一个包含片段的视图寻呼机,每个片段都有一个标签布局(x个标签数量),一个视图寻呼机拿着一个片段,我可以从这样的任何片段切换我的主要活动选项卡布局的选项卡
TabLayout tabLayout = MainActivity.tabLayout;
TabLayout.Tab tab = tabLayout.getTabAt(2);
tab.select();
Run Code Online (Sandbox Code Playgroud)
但如果我尝试以相同的方式更改其中一个片段的选项卡,我会得到一个空指针
TabLayout tabLayout2 = tabFragOne.tabLayout;
TabLayout.Tab tab2 = tabLayout2.getTabAt(2);
tab2.select();
Run Code Online (Sandbox Code Playgroud)
它只会在应用程序首次打开时单击相关按钮时发生,这表明原因是片段尚未附加或创建,
例如,如果我滚动到我要切换到的片段选项卡,然后返回主活动并按下有问题的按钮它将工作.有谁知道解决这个问题的最佳方法?
好吧我发现这个问题的一半关键实际上就是我使用了一个视图寻呼机适配器,这里的一个问题为我的问题提供了很多启示
我想将视图设置为 GONE,然后让其他视图占用剩余空间。
现在,如果我将它设置为 GONE,它会在布局中留下一个空间,该视图是一个具有固定高度的 viewpager。
到目前为止,我读到我必须删除边距,并且没有固定的 viewpager 高度,所以我尝试做这样的事情
if (cardsChoice.predictive == true) {
viewPagerPredicts.setVisibility(View.VISIBLE);
RelativeLayout.LayoutParams layoutParams =
(RelativeLayout.LayoutParams)viewPagerPredicts.getLayoutParams();
layoutParams.setMargins(8,4,8,0);
layoutParams.height = R.dimen.predicts_pager_height;
viewPagerPredicts.setLayoutParams(layoutParams);
}else{
viewPagerPredicts.setVisibility(View.GONE);
RelativeLayout.LayoutParams layoutParams =
(RelativeLayout.LayoutParams)viewPagerPredicts.getLayoutParams();
layoutParams.setMargins(0,0,0,0);
layoutParams.height = 0;
viewPagerPredicts.setLayoutParams(layoutParams);
}
Run Code Online (Sandbox Code Playgroud)
但是这不起作用 - 视图似乎要么忽略这些值并匹配父级,要么消失并带走布局的其余部分。
谁能看到我做错了什么?
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewpagerHolder"
android:layout_marginTop="64dp"
android:layout_alignParentBottom="true">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_height="@dimen/card_pager_height" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager_predicts"
android:layout_width="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp"
android:layout_height="@dimen/predicts_pager_height"
android:layout_below="@id/viewpager2" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="fill" …Run Code Online (Sandbox Code Playgroud) 好的,即时通讯已经在做(我相信),当显示软键盘时,我需要做的所有事情才能使我的应用程序布局滚动/向上移动,但是它无法正常工作,所以我猜测一定有某种即时通讯正在停止它,我想知道它是否固定的高度,这使我的观看者无法意识到,或者我已经读完了一些文章,这些文章在显示键盘时将相对布局描述为“粉碎子视图”,而线性布局则不会粉碎子视图,因此请记住,这是我的布局
主要活动
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/viewpagerHolder">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:layout_height="@dimen/card_pager_height" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/predictsHolder"
android:layout_below="@id/viewpager2">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager_predicts"
android:layout_width="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp"
android:layout_height="@dimen/predicts_pager_height" />
</RelativeLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/predictsHolder"
app:tabGravity="fill"
android:theme="@style/CustomTabLayoutStyle" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tabs">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:background="@color/windowBackground"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
</RelativeLayout>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</android.support.design.widget.AppBarLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/card_pager_height">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:layout_marginEnd="12dp"
app:elevation="4dp"
android:src="@drawable/ic_playlist_play_white_24dp" …Run Code Online (Sandbox Code Playgroud) 我一直在使用Picasso的库在我的应用程序中将图像加载到我的gridview中,它的工作原理和我想要的完全一样.但是用户告诉我图像加载速度非常慢.我知道这是因为网络速度不佳而Picasso正在加载我的完整图像,这些图像非常大,然后调整它们以适合我的图像视图.所以我尝试使用滑动,它以几乎两倍的速度加载图像,但是在某些图像上它不像毕加索那样保持结构.例如毕加索加载图像看起来像
虽然滑行加载它们有不同的状态,这是它最初加载的
滚动后看起来像
然后最终经过大量滚动后看起来像
我非常有信心这是因为我的图像尺寸都不同而且似乎使我的占位符图像不同大小有效但我想知道的是我如何滑动以保持其初始状态,或者如何我能让毕加索加载得更快吗?我听说将颜色格式从888降低到565有戏剧性的效果,任何人都可以借给我两美分吗?感谢您提出的所有建议
编辑
这是我的imageview
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:id="@+id/imageView"/>
Run Code Online (Sandbox Code Playgroud)
这就是我给毕加索打电话的方式
Picasso.with(getActivity())
.load(mThumbIds[position])
.placeholder(R.drawable.placeholder)
.fit()
.into(imageView);
return imageView;
Run Code Online (Sandbox Code Playgroud)
这就是我现在称之为滑行的方式
Glide.with(getActivity())
.load(mThumbIds[position])
.asBitmap()
.placeholder(R.drawable.placeholder)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.fitCenter()
.error(R.drawable.ic_photos)
.into(imageView);
return imageView;
Run Code Online (Sandbox Code Playgroud)
如果重要,这是我的gridview
<GridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="5dp"
android:id="@+id/gridview"
android:numColumns="2"
android:gravity="center"
android:drawSelectorOnTop="true"
android:listSelector="@drawable/ripple"
android:stretchMode="columnWidth"
>
Run Code Online (Sandbox Code Playgroud) 我有很多图像说500ish分布在20个左右的片段中,图像都很小,而且加载都很好,但是我给用户提供了3种不同类型的图像的选择,如果用户现在更改图像,收到OOM错误,因此我认为这是即时处理图像的方式,我认为我需要首先回收旧的图像,但即时通讯对如何做到这一点不确定,任何人都可以帮忙吗?
这是我如何填充我的适配器的方法,我只是添加了两项以简化操作
private void prepareCardData(){
CardWriter cardWriter = new CardWriter(getResources().getDrawable(R.drawable.dog),"DOG","dog ");
cardMakerList.add(cardWriter);
cardWriter = new CardWriter(getResources().getDrawable(R.drawable.cat_ic),"CAT","cat ");
cardMakerList.add(cardWriter);
cardAdapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
这就是我实际上只是在等待共享首选项更改并调用方法的地方
private SharedPreferences.OnSharedPreferenceChangeListener listener = new
SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals("ICONS SELECTED")){
cardsChoice.setIcons(getActivity());
cardsToSet();
System.out.println("OneFrag pref listener");
}
}
};
public void cardsToSet(){
if (cardsChoice.bool_fragTwo == false) {
if (cardsChoice.group == 1) {
cardMakerList.clear();
prepareCardData();
cardsChoice.bool_fragTwo = true;
}
if (cardsChoice.group == 2) {
cardMakerList.clear();
prepareSimpleCardData();
cardsChoice.bool_fragTwo = true;
}
if (cardsChoice.group == 3) …Run Code Online (Sandbox Code Playgroud) 我只是在第一次启动应用程序时尝试显示片段.我正在努力展示片段,但它始终显示,我只希望它在首次发布时显示.我正在displayView导航抽屉drawerlistener中的一个方法中替换片段(这可能是我的问题),我试图在我的方法中使用布尔和共享首选项.关于为什么这不起作用的任何想法
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
firstTimeFrag();
}
}
private boolean firstTimeFrag(){
SharedPreferences pref = getPreferences(MODE_PRIVATE);
boolean ranBefore = pref.getBoolean("RanBefore",false);
if(!ranBefore){
SharedPreferences.Editor editor = pref.edit();
editor.commit();
Fragment fr = new ifFirstTimeFrag();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.frame_container, fr);
fragmentTransaction.commit();
}else{
displayView(0);
}
return ranBefore;
}
Run Code Online (Sandbox Code Playgroud) android ×8
gridview ×2
boolean ×1
drawable ×1
image ×1
keyboard ×1
layout ×1
picasso ×1
searchview ×1
tabs ×1
textchanged ×1
visibility ×1