首先这是我的活动
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
viewpager = (ViewPager)findViewById(R.id.pager);
swipeadapter = new swipeadapter(this);
viewpager.setAdapter(swipeadapter);
//some condition remove textview or hide textview from current Pagerview
//position
//if(mm = oo){ //remove item from current pagerView adapter }
}
}
和我的适配器代码
import android.app.Activity;
import android.content.Context;
import android.graphics.Point;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.util.SparseArray;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.Calendar;
import ws.design.com.R;
public class swipeadapter extends PagerAdapter {
private Context ctx;
private LayoutInflater layoutInflater;
private LinearLayout player;
SparseArray<Fragment> registeredFragments = new SparseArray<>();
public swipeadapter(Context c){
this.ctx = c;
}
public Fragment getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
@Override
public boolean isViewFromObject(View view, Object o) {
return (view == (LinearLayout)o);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
registeredFragments.remove(position);
container.removeView((LinearLayout)object);
}
public void changeVisiblityOfTextView(int visiblity)
{
player.setVisibility(View.GONE);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
layoutInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflatedView = layoutInflater.inflate(R.layout.player, container,false);
player = (LinearLayout)inflatedView.findViewById(R.id.buttons);
Display display = ((Activity)ctx).getWindowManager().getDefaultDisplay();
final Point size = new Point();
display.getSize(size);
container.addView(inflatedView);
return inflatedView;
}
@Override
public int getCount() {
return 10;
}
void setSimpleList(ListView listView){
ArrayList<String> contactsList = new ArrayList<String>();
for (int index = 0; index < 10; index++) {
contactsList.add("I am @ index " + index + " today " + Calendar.getInstance().getTime().toString());
}
listView.setAdapter(new ArrayAdapter<String>(ctx,
R.layout.fb_comments_list_item, android.R.id.text1,contactsList));
}
}
我有pagerView,它的工作目前还不错,但我想隐藏当前PagerView位置的项目,如果条件为true,我怎么能隐藏带有id hideView的textView来自此活动主页
答案 0 :(得分:1)
在SparseArray
的适配器中定义ViewPager
以保留下面的片段实例:
SparseArray<Fragment> registeredFragments = new SparseArray<>();
注意:为什么选择SparseArray? https://developer.android.com/reference/android/util/SparseArray.html
覆盖instanstiateItem
的{{1}}方法,如下所示:
FragmentPagerAdapter
并覆盖 @Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
方法:
DestroyItem
定义一个获取当前片段的方法,如下所示:
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
如果条件为public Fragment getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
,则定义一种公共方法,以更改TextViews
Fragments
的可见度
True
将新的onPageChangeListener添加到public void changeVisiblityOfTextView(int visiblity)
{
mTextView.setVisiblity(visibility);
}
:
ViewPager
我希望我的回答可以帮到你。祝你好运!
修改:
您设置为查看寻呼机的YourPagerAdapter: FragmentPagerAdapter或FragmentStatePagerAdapter。
YourFragment:这是您从 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
YourFragment fragment = (YourFragment)yourPagerAdapter.getRegisteredFragment(position);
if(yourCondition){
fragment.changeVisiblityOfTextview(View.VISIBLE);
}
else{
fragment.changeVisiblityOfTextView(View.GONE)
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
延伸并在视图寻呼机中使用的自定义片段。 (您在适配器的Support.Fragment
方法中返回的片段。
当您在视图寻呼机中返回一个新片段并从适配器获取它以更改放入片段中的项目的可见性时,基本上您将片段实例添加到稀疏数组中。
我假设您的视图分页器片段的布局中的textview。
编辑2:
您不在ViewPager中使用片段,因此我的解决方案不适合您。您可以将ViewPager实现更改为片段,或者不是将片段保存在稀疏数组中,而是可以保留您添加到容器中的膨胀视图,而不是片段,您可以继续使用该视图。在onPageChanged方法中,您可以像我的示例一样获取视图,找到您的textview并更改其可见性。
当我有时间时,我会在这里添加代码。
答案 1 :(得分:0)
如果要从ViewPager
中删除项目,则需要从PagerAdapter
中删除它并调用notifyDatasetChanged()
,然后再次将适配器设置为ViewPager
:
mAdapter.removeItem(position);
mViewPager.setAdapter(mAdapter);
您需要在适配器类中添加一个removeItem
方法(或者您想删除该项目):
public class MyAdapter extends PagerAdapter {
//...
public void removeItem(int position) {
if (position > -1 && position < items.size()) {
items.remove(position);
notifyDataSetChanged();
}
}
//...
}
这是我让ViewPager
刷新并完全删除有问题的视图的唯一方法。
在删除项目并将ViewPager
重新设置到该位置之前,您可以存储当前的ViewPager
位置。