Android setVisibility 在 PagerAdapter 中不起作用
Android setVisibility not working in PagerAdapter
我试图在我的 PagerAdapter 项目中隐藏和显示我的部分视图,但它没有执行任何操作,不是 GONE、VISIBLE 或 INVISIBLE。
public class FeedPagerAdapter extends PagerAdapter {
private final String KEY_GLOBAL_PREFS = "global";
@BindView(R.id.item) ImageView image;
@BindView(R.id.progress_bar) ProgressBar progressBar;
private final SlideActivity host;
private List<Thing> items;
private SharedPreferences sharedPreferences;
private int postition;
public FeedPagerAdapter(SlideActivity host, List<Thing> items){
this.host = host;
this.items = items;
sharedPreferences = host.getSharedPreferences(KEY_GLOBAL_PREFS, Context.MODE_PRIVATE);
}
@Override
public Object instantiateItem(final ViewGroup parent, int position) {
final View view = LayoutInflater.from(host).inflate(R.layout.item_slide_reddit_post, parent, false);
ButterKnife.bind(this, view);
progressBar.setVisibility(View.GONE);
return view;
}
@Override
public int getCount() {
return items.size();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
这是商品 xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src:"..."/>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
下面是从主机设置适配器的方式 activity:
adapter = new FeedPagerAdapter(SlideActivity.this, List<> of items);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(position);
adapter.notifyDataSetChanged();
任何帮助都会很棒
再次查看那个 item.xml,它为我寻找你的图像匹配父级,你的进度条是包装内容。将图像更改为 wrap_contet 并确保显示进度条!
在 progressBar.setVisibility(View.GONE);
之后添加一个 notifyDataSetChanged()
可能行 adapter.notifyDataSetChanged();
在您设置进度条可见性之前发生。
我记得更改 ProgressBar 状态,您应该始终使用 runOnUiThread()
getActivity().runOnUiThread(new Runnable() {
public void run() {
// implement View changes.
}
});
似乎使用 Butterknife
或标准 findViewById
设置 ProgressBar
项目无法更新视图,不知道为什么,也许有人可以解释一下。每次需要在 PagerAdapter
中更改可见性时,我都会通过查找实际项目来解决,如下所示:
@Override
public Object instantiateItem(final ViewGroup parent, int position) {
final View view = LayoutInflater.from(host).inflate(R.layout.item_slide_reddit_post, parent, false);
ButterKnife.bind(this, view);
view.findViewById(R.id.progress_bar).setVisibility(View.GONE);
return view;
}
我试图在我的 PagerAdapter 项目中隐藏和显示我的部分视图,但它没有执行任何操作,不是 GONE、VISIBLE 或 INVISIBLE。
public class FeedPagerAdapter extends PagerAdapter {
private final String KEY_GLOBAL_PREFS = "global";
@BindView(R.id.item) ImageView image;
@BindView(R.id.progress_bar) ProgressBar progressBar;
private final SlideActivity host;
private List<Thing> items;
private SharedPreferences sharedPreferences;
private int postition;
public FeedPagerAdapter(SlideActivity host, List<Thing> items){
this.host = host;
this.items = items;
sharedPreferences = host.getSharedPreferences(KEY_GLOBAL_PREFS, Context.MODE_PRIVATE);
}
@Override
public Object instantiateItem(final ViewGroup parent, int position) {
final View view = LayoutInflater.from(host).inflate(R.layout.item_slide_reddit_post, parent, false);
ButterKnife.bind(this, view);
progressBar.setVisibility(View.GONE);
return view;
}
@Override
public int getCount() {
return items.size();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
这是商品 xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src:"..."/>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
下面是从主机设置适配器的方式 activity:
adapter = new FeedPagerAdapter(SlideActivity.this, List<> of items);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(position);
adapter.notifyDataSetChanged();
任何帮助都会很棒
再次查看那个 item.xml,它为我寻找你的图像匹配父级,你的进度条是包装内容。将图像更改为 wrap_contet 并确保显示进度条!
在 progressBar.setVisibility(View.GONE);
之后添加一个 notifyDataSetChanged()
可能行 adapter.notifyDataSetChanged();
在您设置进度条可见性之前发生。
我记得更改 ProgressBar 状态,您应该始终使用 runOnUiThread()
getActivity().runOnUiThread(new Runnable() {
public void run() {
// implement View changes.
}
});
似乎使用 Butterknife
或标准 findViewById
设置 ProgressBar
项目无法更新视图,不知道为什么,也许有人可以解释一下。每次需要在 PagerAdapter
中更改可见性时,我都会通过查找实际项目来解决,如下所示:
@Override
public Object instantiateItem(final ViewGroup parent, int position) {
final View view = LayoutInflater.from(host).inflate(R.layout.item_slide_reddit_post, parent, false);
ButterKnife.bind(this, view);
view.findViewById(R.id.progress_bar).setVisibility(View.GONE);
return view;
}