2016-06-11 14 views
0

먼저 내 활동제거 항목

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 위치에 항목을 숨기려면 그게 사실이라면 사용자에게 보여 주죠 어떻게 id 숨김 텍스트보기를 숨길 수 있습니까이 활동의 ​​메인이

답변

1

SparseArray을 정의하십시오 0의 어댑터는 다음과 같은 조각 인스턴스를 유지합니다.

SparseArray<Fragment> registeredFragments = new SparseArray<>(); 

참고 : 왜 SparseArray가 필요합니까? 당신의 FragmentPagerAdapter 아래 등을 https://developer.android.com/reference/android/util/SparseArray.html

재정 instanstiateItem 방법 : 방법

@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); 
    } 

Def 당신의 상태가 True

public void changeVisiblityOfTextView(int visiblity) 
{ 
    mTextView.setVisiblity(visibility); 
} 

인 경우 공공 방법 FragmentsTextViews의 가시성을 변경하는 중첩에 당신의 ViewPager에 새 onPageChangeListener를 추가

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) { 

       } 
      }); 

내가 내 대답은 당신이 도움이되기를 바랍니다. 행운을 빕니다!

편집 :

YourPagerAdapter : 당신이 호출기를 볼 수 설정 FragmentPagerAdapter 또는 FragmentStatePagerAdapter.

YourFragment :Support.Fragment에서 연장하여보기 호출기에서 사용하는 사용자 정의 조각입니다. (어댑터의 public Fragment getItem(int position) 메서드로 돌아 오는 단편

기본적으로보기 단편에 새 단편을 반환하고 어댑터에서 가져 와서 단편적인 인스턴스를 추가하면 당신의 조각에 넣어

를 내가보기 호출기 조각의 레이아웃에 텍스트 뷰 년대

편집이 있다고 가정합니다.. 당신이 당신의 ViewPager의 조각을 사용하지 않는

옵스 그래서 내 솔루션이 적합하지 않습니다 에야디야 유. ViewPager 구현을 조각으로 변경하거나 조각을 희소 배열로 유지하는 대신 컨테이너에 추가 한 팽창 된 뷰를 유지할 수 있으며 해당 뷰로 이동할 수있는 조각 대신 컨테이너를 추가 할 수 있습니다.그리고 onPageChanged 메소드에서 예제와 같이 뷰를 얻을 수 있으며, 텍스트 뷰를 찾고 가시성을 변경할 수 있습니다.

여기에 코드를 추가 할 시간이 있습니다.

+0

대단히 감사합니다! –

+0

하지만 Main_activity에서이 changeVisiblityOfTextview를 어떻게 호출 할 수 있습니까? Main_activity –

+1

의보기 호출기가 기본 활동에 있고 onpagechange 리스너 코드가 기본 활동에있는 경우 어떻게해야합니까? – savepopulation