2016-09-03 2 views
0

フラグメントを次々とレンダリングしているビューページャを使用しています。私が直面している問題は、現在表示されているフラグメントをタッチすると、まだロードされていない次のフラグメントのタッチイベントが発生することです。どのようにして現在の/目に見える部分がタッチされたかを確認するには、&タッチイベントがそれに応じて処理されます。Androidでポケットベルの問題を表示する

これは、フラグメントをレンダリングする私のアダプタです。

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
    public ScreenSlidePagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 

     Log.d("zambob",position+":"+slideShowItems.get(position).name); 
     Fragment fragment = new ScreenSlidePageFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("IMAGE_URL",slideShowItems.get(position).image); 
     bundle.putString("CAPTION", slideShowItems.get(position).name); 
     fragment.setArguments(bundle); 
     return fragment; 
    } 

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

これは、タッチイベントも処理するフラグメントクラスです。

public class ScreenSlidePageFragment extends Fragment { 

String imageUrl,text; 
UWSharedPreference preference; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    ViewGroup rootView = (ViewGroup) inflater.inflate(
      R.layout.fragment_slide_show, container, false); 

    rootView.getBackground().setAlpha(200); 

    preference = new UWSharedPreference(getActivity()); 

    imageUrl = getArguments().getString("IMAGE_URL"); 
    text = getArguments().getString("CAPTION"); 

    TouchImageView iv_image = (TouchImageView) rootView.findViewById(R.id.jj_image); 
    TextView tv_caption = (TextView) rootView.findViewById(R.id.caption_text); 

    iv_image.setImageUrl(imageUrl, AppController.getInstance().getImageLoader()); 
    if (text != null && text.equals("custom")){ 
     tv_caption.setText(""); 
    } 
    else { 
     tv_caption.setText(text); 
    } 

    iv_image.setOnTouchListener(new OnTouchListener()); 

    return rootView; 
} 

class OnTouchListener implements View.OnTouchListener { 
    public boolean onTouch(View v, MotionEvent event) { 
     Log.d("zambob","On Touch Called for text" + text +" diner txn id" + preference.getDinerTxnID()); 

     if (text.equals("custom") && preference.getDinerTxnID()!=0){ 
      startActivity(new Intent(getActivity(), FBCheckInActivity.class)); 
      getActivity().finish(); 
     } 
     else { 
      getActivity().onBackPressed(); 
     } 

     return true; 
    } 
} 

}

今の問題は、ビューのページャでは、3つの断片が最初にロードされているということです。目に見えるもの、背後にあるもの&次に来るもの。インテントプロセスを開始するために必要なフラグメントに触れると機能しません。しかし、上記の前にフラグメントをタッチすると、必要なプロセスが進行中です。

私は目に見える断片に触れたら、必要なプロセスが始まることを確認する必要がありますか?

+0

あなたの質問は分かりません。おそらくもう少し説明やコードが役に立つでしょう。 – happydude

答えて

0

最後に私は自分自身で解決策を見つけました& Googleから少し助けてください。

実際に私はDepth Page Transformerを使用して、断片間のスワイプの動きを表示していました。だから私はちょうどthis-使って、ページの変圧器を微調整:これは単に確認します

mPager.setPageTransformer(true, new ViewPager.PageTransformer() { 
     @Override 
     public void transformPage(View page, float position) { 
      float translationX; 
      float scale; 
      float alpha; 

      if (position >= 1 || position <= -1) { 
       // Fix for https://code.google.com/p/android/issues/detail?id=58918 
       translationX = 0; 
       scale = 1; 
       alpha = 1; 
      } else if (position >= 0) { 
       translationX = -page.getWidth() * position; 
       scale = -0.2f * position + 1; 
       alpha = Math.max(1 - position, 0); 
      } else { 
       translationX = 0.5f * page.getWidth() * position; 
       scale = 1.0f; 
       alpha = Math.max(0.1f * position + 1, 0); 
      } 

      mPager.setTranslationX(translationX); 
      mPager.setScaleX(scale); 
      mPager.setScaleY(scale); 
      mPager.setAlpha(alpha); 
     } 
    }); 

見えるフラグメントは、ビューポケットベルの規模、アルファ&翻訳を設定することで、目に見えるフラグメントの背後にあるものを触れていないなっています。また、View Pagerのルートレイアウトをクリック可能にします。

View PagerをレンダリングするアクティビティのXML。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:urbanwand="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:clickable="true" 
    tools:context="com.urbanwand.diner.SlideShowActivity"> 

    <com.urbanwand.MyViewPager 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/pager" 
     urbanwand:scrollduration="500" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

この回答が役立ちます。

関連する問題