2016-06-21 67 views
1

我試圖發表類似的問題沒有任何答案,但再次發佈。問題查看片段通過標籤

我遇到的問題是通過選項卡查看片段,我有一個AppBar中的3個選項卡顯示與ViewPager & FragmentPagerAdapter。

問題是活動開始時,其中一個選項卡的行爲不一致,因爲首次登錄應用程序&活動時,它將顯示片段(視頻剪輯)的內容,但在執行期間在應用程序中的活動之間切換,並返回到包含3個選項卡的活動,選擇特定的Tab不顯示任何內容,如果在Logcat中,我可以告訴它正在檢索與應顯示的Vid Clip相關的數據,回到我在Logcat中看到的活動,即使當我選擇不同的Tab時,(圖片)來自其他2個Tab的數據正在被檢索!

設置如下;

主要活動;

public class Member extends AppCompatActivity { 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.member); 
    Firebase.setAndroidContext(this); 
    ButterKnife.bind(this); 

    // Adding Toolbar to Main screen 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    // Setting ViewPager for each Tabs 


    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 
    // Set Tabs inside Toolbar 
    TabLayout tabs = (TabLayout) findViewById(R.id.tabs); 
    tabs.setupWithViewPager(viewPager); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
    Adapter adapter = new Adapter(getSupportFragmentManager()); 
    adapter.addFragment(new PicContentMMFragment(), "Pictures"); 
    adapter.addFragment(new VidContentFragment(), "Videos"); 
    adapter.addFragment(new LocationsContentFragment(), "Locations"); 

    viewPager.setAdapter(adapter); 
} 

static class Adapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public Adapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

那麼,作爲一個用戶的評論後指出,這個問題可能是從具體fragemnt本身,而不是方式選項卡和Viewpager以下是VidContentFragment;

public class VidContentFragment extends android.support.v4.app.Fragment { 
    @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    final RecyclerView recyclerView = (RecyclerView) inflater.inflate(
      R.layout.recycler_view, container, false); 

    Log.i("MyTag_onCreate","vidContentFragment_Loaded"); 

    ContentAdapter adapter = new ContentAdapter(recyclerView.getContext()); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

    return recyclerView; 
} 
public static class ViewHolder extends RecyclerView.ViewHolder { 

    public VideoView video; 
    public TextView authorName; 
    public TextView ratingValue; 
    public TextView locationValue; 
    public RatingBar ratingB; 
    public Button submitRating; 
    public LinearLayout placeNameHolder; 
    public int newRating; 


    public ViewHolder(LayoutInflater inflater, ViewGroup parent) { 
     super(inflater.inflate(R.layout.item_card_vid, parent, false)); 
     authorName = (TextView) itemView.findViewById(R.id.card_title); 
     ratingValue = (TextView) itemView.findViewById(R.id.ratingValue); 
     locationValue = (TextView) itemView.findViewById(R.id.locationValue); 
     video = (VideoView) itemView.findViewById(R.id.placeVid); 
     ratingB = (RatingBar)itemView.findViewById(R.id.ratingBarMM); 
     ratingB.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
      @Override 
      public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
       newRating = (int) ratingB.getRating(); 
      } 
     }); 
     submitRating = (Button) itemView.findViewById(R.id.submitRatingMM); 
     submitRating.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       public_id = publicID[getPosition()]; 

       Log.i("MyTag_Rating",public_id); 
    public static class ContentAdapter extends RecyclerView.Adapter<ViewHolder> { 
    // Set numbers of List in RecyclerView. 

    private Context mContext; 

    public ContentAdapter(Context context) { 

     this.mContext = context; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new ViewHolder(LayoutInflater.from(parent.getContext()), parent); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) { 

     holder.authorName.setText(author[position]); 

     holder.ratingValue.setText(ratingV[position]); 

     holder.locationValue.setText(locationV[position]); 

     Uri video = Uri.parse(mVideos[position]); 
     holder.video.setVideoURI(video); 
     holder.video.setMediaController(new MediaController(mContext)); 
     holder.video.requestFocus(); 
     holder.video.seekTo(1000); 
     holder.video.pause(); 

     try{ 
      String url1 = mVideos[position]; 
      URL ulrn = new URL(url1); 
      HttpURLConnection con = (HttpURLConnection)ulrn.openConnection(); 
      InputStream is = con.getInputStream(); 
      Bitmap bmp = BitmapFactory.decodeStream(is); 
      if (null != bmp) 

       Palette.generateAsync(bmp, new Palette.PaletteAsyncListener() { 
        public void onGenerated(Palette palette) { 
         int bgColor = palette.getVibrantColor(mContext.getResources().getColor(android.R.color.black)); 
         holder.placeNameHolder.setBackgroundColor(bgColor); 
        } 
       }); 
      else 
       Log.e("MyTag_BMP","The Bitmap is NULL"); 

     }catch (Exception e){ 

     } 

    } 

    @Override 
    public int getItemCount() { 
     return LENGTH; 
    } 
} 

}

代碼的某些部分(檢索相關的數據火力)留出縮短。

儘管其他2個片段的組織方式相同,但此片段的行爲不一致嗎?

+0

這聽起來像是當你回去時,片段不適當地連接到視圖尋呼機。你知道,如果片段與視頻剪輯加載正確嗎? – user3331142

+0

不知道你到底意味着什麼是正確加載,但它加載的只有一個(僅在首次啓動活動時)加載內容正常,視頻剪輯和片段佈局。正如我所提到的,當在logcat中加載包含Tabs(Fragment)的活動時,我會得到一個指示Log.i爲其他Tabs檢索數據,例如選擇視頻選項卡將顯示有關logcat中圖片選項卡數據的信息? – JanusJanus

+1

我的意思是,第二次,你的片段onCreate代碼得到運行?如果是,則表示片段實際上正被重新附加到viewpager。如果沒有,您的片段可能永遠不會由於任何原因而被viewpager加載。這將解釋空白屏幕。 – user3331142

回答

1

這裏是適配器的視圖版本,我有一個recyclerview你說可能會有所幫助。你需要重構以適應你的情況。我主要是爲了幫助展示裸露的互動。

public class AnimalAdapter extends RecyclerView.Adapter<AnimalAdapter.AnimalCardViewHolder>{ 

    private List<Animals> animalList; 
    public AnimalAdapter adapter = this; 
    Context context; 

    public AnimalAdapter(List<Animals> animalList, Context context) { 
     this.animalList = animalList; 
     this.context = context; 
     this.setInterface((iAdapterInterface) context); 
    } 

    @Override 
    public int getItemCount() { 
     return animalList.size(); 
    } 

    @Override 
    public void onBindViewHolder(AnimalCardViewHolder holder, int position) { 
     Animals animal = animalList.get(position); 
     holder.txtName.setText(animal.getName()); 
     holder.txtType.setText(animal.getType()); 
    } 
    @Override 
    public AnimalCardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.animal_card_view, parent, false); 
     return new AnimalCardViewHolder(itemView); 
    } 


    public class AnimalCardViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     protected TextView txtName; 
     protected TextView txtType; 

     public AnimalCardViewHolder(final View itemView) { 
      super(itemView); 
      txtName = (TextView) itemView.findViewById(R.id.txtName); 
      txtType = (TextView) itemView.findViewById(R.id.txtType); 
      imgClose = (ImageView) itemView.findViewById(R.id.txtRemove); 
      listItem = itemView.findViewById(R.id.list_item); 

      listItem.setOnClickListener(this); 
      imgClose.setOnClickListener(this); 

     } 

     @Override 
     public void onClick(View v) { 

      switch (v.getId()) { 
       case R.id.txtRemove: 
        break; 
       case R.id.list_item: 
        break; 
      } 
     } 

    } 


} 
+0

謝謝你的代碼,試圖重組我的代碼,很困難,但是正如你指出的那樣,這個問題可能來自代碼結構,因此我將不得不努力去研究它是如何去做的。謝謝您。 – JanusJanus