Android 在水平列表触摸时禁用Viewpager滑动

Android 在水平列表触摸时禁用Viewpager滑动,android,android-viewpager,horizontal-scrolling,Android,Android Viewpager,Horizontal Scrolling,我有一个ViewPager,在它里面,我正在使用适配器加载所有内容。不幸的是,我在这些内容中有水平列表视图,当我试图滑动水平列表视图时,整个视图页面正在滑动。有什么解决办法吗?谢谢你的期待 这是我的ViewPager布局代码 <com.devpoint.common.CustomViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pa

我有一个
ViewPager
,在它里面,我正在使用适配器加载所有内容。不幸的是,我在这些内容中有
水平列表视图
,当我试图滑动
水平列表视图
时,整个
视图页面
正在滑动。有什么解决办法吗?谢谢你的期待

这是我的ViewPager布局代码

<com.devpoint.common.CustomViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"   
        android:id="@+id/pager"
        android:background="#e5e5e5" 
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

这是我在ViewPager中的一个项目

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#e5e5e5" >

    <ScrollView
        android:id="@+id/scrollviewid"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:padding="5dp" >

        <TableLayout
            android:id="@+id/tableview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" > 


            <android.support.v7.widget.CardView
                android:id="@+id/cardview"
                xmlns:card_view="http://schemas.android.com/apk/res-auto"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="@dimen/liteam_fronmargin"
                android:background="#e5e5e5"
                android:clickable="true"
                android:orientation="vertical"
                android:padding="35dp"
                android:tag="front"
                card_view:cardCornerRadius="@dimen/liteam_cradius" > 




                <TableRow
                    android:layout_width="match_parent"
                    android:layout_height="150dp"
                    android:background="#e5e5e5"
                    android:gravity="center_horizontal"
                    android:orientation="horizontal" >



                          <com.devpoint.adapter.HorizontalListView
                                android:id="@+id/gridview"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:columnWidth="60dp"
                                android:layout_gravity="center"
                                android:horizontalSpacing="10dp"
                                android:numColumns="3"
                                android:padding="10dp"
                                android:stretchMode="columnWidth"
                                android:verticalSpacing="10dp" />
                </TableRow>



              </android.support.v7.widget.CardView>   


              <!-- <android.support.v7.widget.CardView

                xmlns:card_view="http://schemas.android.com/apk/res-auto"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="@dimen/liteam_fronmargin"
                android:clickable="true"
                android:orientation="vertical"
                android:padding="35dp"
                android:tag="front"
                card_view:cardCornerRadius="@dimen/liteam_cradius" >

                <TableRow
                    android:id="@+id/retailer_mobileno_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:orientation="horizontal"
                    android:padding="10dp" >

                    <fragment
                        android:id="@+id/map"
                        android:layout_width="@dimen/single_mapwidth"
                        android:layout_height="@dimen/single_mapheight"
                        android:layout_alignParentBottom="true"
                        android:layout_centerHorizontal="true"
                        class="com.google.android.gms.maps.SupportMapFragment" />
                </TableRow>
            </android.support.v7.widget.CardView> --> 

                  <TableRow

                    android:layout_width="match_parent"
                    android:layout_height="150dp"
                    android:background="#e5e5e5"
                    android:gravity="center_horizontal"
                    android:orientation="horizontal" >
                <ImageView 
                        android:id="@+id/btn_map"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:src="@drawable/map_location"
                        android:layout_weight="0.4"
                        android:layout_alignParentTop="true"
                        android:layout_marginTop="@dimen/userplace_btntop"/>

                </TableRow> 

        </TableLayout>
  </ScrollView>


</FrameLayout>

我的适配器是这样的

public ViewPagerAdapter(Context context, List<ListDetails> products,
            android.app.FragmentManager fragmentManager) {
        this.context = (Activity) context;
        this.products = products;

        // productNew =(CopyOnWriteArrayList<ListDetails>) products;

    }

    public void setPages(int x) {
        this.pages = x;
    }

    @Override
    public int getCount() {
        pages = products.size();
        return products.size();
    }

    public ListDetails getItem(int position) {
        return products.get(position);
    }

    private class ViewHolder {
        TextView txt_offer;
        TextView txt_distance;
        TextView txt_shop;
        TableLayout tbldetails;
        RatingBar rat_user;
        ImageView viewdetails;
        TextView txt_posteddate;
        TextView txt_enddate;
        TextView txt_category;
        TextView txt_couponcode;

        Button btnrating;

        HorizontalListView swipelisview;

        ScrollView scrollview;

        CardView card;

        ImageView map;

        CirclePageIndicator mIndicator;
        ViewPager viewPager;
        FloatingActionButton btn_call;
        FloatingActionButton btn_message;
        FloatingActionButton btn_del;
        FloatingActionButton btn_Mail;
        FloatingActionButton btn_review;
        FloatingActionButton btn_chat;

        FloatingActionsMenu fmenu;
        FloatingActionsMenu fmenu1;

    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        if (object != null) {
            return ((FrameLayout) object) == view;
        } else {
            return false;
        }
    }

    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    @SuppressLint("InflateParams")
    @Override
    public Object instantiateItem(final ViewGroup container, final int position) {

        LayoutInflater li = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (itemView == null) {
            if (alertLayout == null)

                alertLayout = li.inflate(R.layout.map_dialog, null);

        }

        try {

            // if(itemView == null)
            // {
            inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            itemView = inflater.inflate(R.layout.single, container, false);
            // }

        } catch (InflateException e) {

            e.printStackTrace();

        }
        try {

            holder = new ViewHolder();
            holder.txt_offer = (TextView) itemView
                    .findViewById(R.id.Offer_edittext);
            holder.txt_distance = (TextView) itemView
                    .findViewById(R.id.distance_edittext);
            holder.txt_shop = (TextView) itemView
                    .findViewById(R.id.Shop_edittext);
            holder.tbldetails = (TableLayout) itemView
                    .findViewById(R.id.tablevielw);
            holder.rat_user = (RatingBar) itemView
                    .findViewById(R.id.user_ratingbar);
            holder.viewdetails = (ImageView) itemView
                    .findViewById(R.id.btn_details);
            holder.txt_posteddate = (TextView) itemView
                    .findViewById(R.id.offerPosted_edittext);
            holder.txt_enddate = (TextView) itemView
                    .findViewById(R.id.OfferEnd_edittext);
            holder.txt_category = (TextView) itemView
                    .findViewById(R.id.category_edittext);
            holder.txt_couponcode = (TextView) itemView
                    .findViewById(R.id.Coupon_edittext);

            holder.btnrating = (Button) itemView.findViewById(R.id.btn_rating);

            holder.swipelisview = (HorizontalListView) itemView
                    .findViewById(R.id.gridview);



            // holder.swipelisview.setOnTouchListener(mSuppressInterceptListener);



            holder.swipelisview.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    //DetailsViewpagerFragment.viewPager.setEnabled(false); 
                    DetailsViewpagerFragment.viewPager.setSwipeable(false);

                    DetailsViewpagerFragment.viewPager.setEnabled(false);

                    holder.scrollview.setEnabled(false);
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_UP:
                            //DetailsViewpagerFragment.viewPager.setEnabled(true);
                            DetailsViewpagerFragment.viewPager.setSwipeable(true);
                            holder.scrollview.setEnabled(true);
                            break;
                    }
                    return false;
                }
            });


            ((ViewPager) container).addView(itemView, 0);

            // return itemView;
        } catch (Exception e) {
            // PostLogcatErorrs(e);
        }

        return itemView;
    }


}
public ViewPagerAdapter(上下文、产品列表、,
android.app.FragmentManager(碎片管理器){
this.context=(活动)上下文;
这一点。产品=产品;
//productNew=(CopyOnWriteArrayList)产品;
}
公共无效设置页(int x){
这个参数=x;
}
@凌驾
public int getCount(){
pages=products.size();
返回产品。大小();
}
公共列表详细信息getItem(内部位置){
退货。获得(职位);
}
私有类视窗持有者{
TextView txt_提供;
文本视图txt_距离;
TextView txt_商店;
表格布局详细信息;
RatingBar rat_用户;
ImageView视图详细信息;
TextView txt_Postedate;
TextView txt_enddate;
文本视图txt_类别;
TextView txt_耦合代码;
按钮BTN;
水平视图swipelisview;
滚动视图滚动视图;
CardView卡;
影像地图;
环形指示器;
查看页面查看页面;
浮动操作按钮btn_调用;
浮动操作按钮btn_消息;
浮动操作按钮btn_del;
浮动操作按钮btn_邮件;
浮动操作按钮btn\U审查;
浮动操作按钮btn_聊天;
浮动操作菜单功能表;
浮动操作菜单fmenu1;
}
@凌驾
公共布尔值isViewFromObject(视图,对象){
if(对象!=null){
返回((FrameLayout)对象)==视图;
}否则{
返回false;
}
}
public int getItemPosition(对象){
返回位置\无;
}
@SuppressLint(“充气参数”)
@凌驾
公共对象实例化项(最终视图组容器,最终int位置){
LayoutInflater li=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
如果(itemView==null){
如果(alertLayout==null)
alertLayout=li.充气(R.layout.map_对话框,空);
}
试一试{
//如果(itemView==null)
// {
充气器=(充气器)上下文
.getSystemService(上下文布局\充气机\服务);
itemView=充气机。充气(右布局。单个,容器,假);
// }
}锁扣(充气异常e){
e、 printStackTrace();
}
试一试{
holder=新的ViewHolder();
holder.txt_offer=(TextView)itemView
.findviewbyd(R.id.Offer\u edittext);
holder.txt_距离=(文本视图)项目视图
.findViewById(R.id.distance\u edittext);
holder.txt_shop=(文本视图)项目视图
.findViewById(R.id.Shop_edittext);
holder.tbldetails=(TableLayout)项目视图
.findviewbyd(R.id.tablevielw);
holder.rat_user=(RatingBar)项目视图
.findViewById(R.id.user\u ratingbar);
holder.viewdetails=(ImageView)itemView
.findViewById(R.id.btn_详细信息);
holder.txt_posteddate=(TextView)itemView
.findViewById(R.id.offerPosted_edittext);
holder.txt_enddate=(TextView)itemView
.findviewbyd(R.id.OfferEnd_edittext);
holder.txt_category=(TextView)itemView
.findViewById(R.id.category_edittext);
holder.txt_耦合代码=(TextView)itemView
.findViewById(R.id.U.edittext);
holder.btnrating=(按钮)itemView.findViewById(R.id.btn\U评级);
holder.swipelisview=(HorizontalListView)项目视图
.findviewbyd(R.id.gridview);
//holder.swipelisview.setOnTouchListener(mSuppressInterceptListener);
holder.swipelisview.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
//DetailsViewpagerFragment.viewPager.setEnabled(false);
DetailsViewpagerFragment.viewPager.Setsweable(false);
DetailsViewpagerFragment.viewPager.setEnabled(false);
holder.scrollview.setEnabled(假);
开关(event.getAction()){
case MotionEvent.ACTION\u UP:
//DetailsViewpagerFragment.viewPager.setEnabled(true);
DetailsViewpagerFragment.viewPager.Setsweable(true);
holder.scrollview.setEnabled(真);
打破
}
返回false;
}
});
((ViewPager)容器).addView(itemView,0);
//返回项目视图;
}捕获(例外e){
//日志记录者(e);
}
返回项目视图;
}
}
我的主文件如下所示,这里我调用Viewpager适配器

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        try {

                try { 
                    rootView = inflater.inflate(R.layout.details_viewpager_fragment, container, false);

                    //ViewPager mIndicator = (ViewPager) rootView.findViewById(R.id.pager);


                    GetOfferShopList();
                } catch (InflateException e) {
                    PostLogcatErorrs(e);
                } 


        } catch (Exception e) {
            Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG)
                    .show();
            e.printStackTrace();
            PostLogcatErorrs(e);


        }
        return rootView;
    }


    private void GetOfferShopList() {
        try {

            final Location CurrentLocation = new Location(
                    getString(R.string.point_A));
            CurrentLocation.setLatitude(latitude);
            CurrentLocation.setLongitude(longitude);
            ListItemsData = new CopyOnWriteArrayList<ListDetails>();
            // Creating volley request obj

                    JsonObjectRequest movieReq = new JsonObjectRequest(LoadActivity.BaseUri + "GetAllOffer?type=",
                            null, new Response.Listener<JSONObject>() {




                                @Override
                                public void onResponse(JSONObject response) {
                                    //Log.d(TAG, response.toString());

                                    JSONArray GetMG_AppointmentRequestResult = null;
                                    try {
                                        GetMG_AppointmentRequestResult = response.getJSONArray(getString(R.string.Json_offerresult));
                                    } catch (JSONException e1) {
                                        Toast.makeText(getActivity(), 
                                                e1.getMessage(), Toast.LENGTH_LONG).show();
                                        e1.printStackTrace();
                                    }
                                    // Parsing json
                                    for (int i = 0; i < GetMG_AppointmentRequestResult.length(); i++) {
                                        try {



                                            JSONObject obj = GetMG_AppointmentRequestResult.getJSONObject(i);

                                            ListDetails ListModelObj = new ListDetails();

                                            Location RetailerLocation = new Location(getString(R.string.point_B));
                                            RetailerLocation.setLatitude(Double.parseDouble(obj
                                                    .getString(  getString(R.string.Rlocaion_Lat)))); 
                                            RetailerLocation.setLongitude(Double.parseDouble(obj
                                                    .getString(  getString(R.string.Rlocaion_Lng))));
                                            float distance = CurrentLocation.distanceTo(RetailerLocation)/1000;

                                            float val = (float)Math.round(distance * 10) / 10;


                                            ListModelObj.setDistance(val);

                                            ListModelObj.setPosition_id(Integer.parseInt(obj.getString(getString(R.string.Shop_RegID))));
                                            ListModelObj.setShopName(obj.getString(getString(R.string.Shop_Name)));
                                            ListModelObj.setDescription(obj.getString(getString(R.string.Offer_Name)));
                                            ListModelObj.setLat(Double.parseDouble(obj.getString( getString(R.string.Rlocaion_Lat))));
                                            ListModelObj.setLng(Double.parseDouble(obj.getString(  getString(R.string.Rlocaion_Lng))));                                         
                                            ListModelObj.setDeal(obj.getString(getString(R.string.retailer_deal))); 
                                            ListModelObj.setPromoCode(obj.getString(getString(R.string.promo_code)));
                                            ListModelObj.setAreaName(obj.getString(getString(R.string.Area_Name)));

                                            ListModelObj.setOfferStatus(obj.getString( getString(R.string.Offer_Status)));
                                            ListModelObj.setCategoryName(obj.getString( getString(R.string.Category_Type)));

                                            ListModelObj.setPostedDate(obj
                                                    .getString( getString(R.string.Offer_StartDate)));


                                            ListModelObj.setOfferEndTime(obj
                                                    .getString( getString(R.string.Offer_EndTime)));

                                            ListModelObj.setOfferEndDate(obj
                                                    .getString( getString(R.string.Offer_EndDate)));

                                            ListModelObj.setOfferID(obj
                                                    .getString(getString(R.string.Offer_id)));


                                            ListModelObj.setImageName1(obj.getString(getString(R.string.single_ImageName)));

                                            String abc = obj.getString(getString(R.string.single_ImageName));
                                            String[] xyz = abc.split(",");

                                            ListModelObj.setListImage(LoadActivity.BaseUriImg 
                                                                                            + xyz[0]);  


                                            JSONObject aaa = obj.getJSONObject("result1");
                                            //ListModelObj.setJSONData(aaa.getJSONArray("GetAllOfferResult"));                                  





                                            ListItemsData1 = new CopyOnWriteArrayList<ListDetails>();

                                        // Parsing json
                                            for (int i1 = 0; i1 < aaa.getJSONArray("GetAllOfferResult").length(); i1++) {
                                                try {



                                                    JSONObject obj1 = aaa.getJSONArray("GetAllOfferResult").getJSONObject(i1);

                                                    ListDetails ListModelObj1 = new ListDetails();

                                                    Location RetailerLocation1 = new Location(getString(R.string.point_B));
                                                    RetailerLocation.setLatitude(Double.parseDouble(obj1
                                                            .getString(  getString(R.string.Rlocaion_Lat)))); 
                                                    RetailerLocation.setLongitude(Double.parseDouble(obj1
                                                            .getString(  getString(R.string.Rlocaion_Lng))));
                                                    float distance1 = CurrentLocation.distanceTo(RetailerLocation)/1000;

                                                    float val1 = (float)Math.round(distance * 10) / 10;


                                                    ListModelObj1.setDistance(val);

                                                    ListModelObj1.setPosition_id(Integer.parseInt(obj1.getString(getString(R.string.Shop_RegID))));
                                                    ListModelObj1.setShopName(obj1.getString(getString(R.string.Shop_Name)));
                                                    ListModelObj1.setDescription(obj1.getString(getString(R.string.Offer_Name)));
                                                    ListModelObj1.setLat(Double.parseDouble(obj1.getString( getString(R.string.Rlocaion_Lat))));
                                                    ListModelObj1.setLng(Double.parseDouble(obj1.getString(  getString(R.string.Rlocaion_Lng))));                                           
                                                    ListModelObj1.setDeal(obj1.getString(getString(R.string.retailer_deal))); 
                                                    ListModelObj1.setPromoCode(obj1.getString(getString(R.string.promo_code)));
                                                    ListModelObj1.setAreaName(obj1.getString(getString(R.string.Area_Name)));

                                                    ListModelObj1.setOfferStatus(obj1.getString( getString(R.string.Offer_Status)));
                                                    ListModelObj1.setCategoryName(obj1.getString( getString(R.string.Category_Type)));

                                                    ListModelObj1.setPostedDate(obj1
                                                            .getString( getString(R.string.Offer_StartDate)));


                                                    ListModelObj1.setOfferEndTime(obj1
                                                            .getString( getString(R.string.Offer_EndTime)));

                                                    ListModelObj1.setOfferEndDate(obj1
                                                            .getString( getString(R.string.Offer_EndDate)));

                                                    ListModelObj1.setOfferID(obj1
                                                            .getString(getString(R.string.Offer_id)));


                                                    ListModelObj1.setImageName1(obj1.getString(getString(R.string.single_ImageName)));

                                                    String abc1 = obj1.getString(getString(R.string.single_ImageName));
                                                    String[] xyz1 = abc1.split(",");

                                                    ListModelObj1.setListImage(LoadActivity.BaseUriImg 
                                                                                                    + xyz1[0]); 




                                                    ListItemsData1.add(ListModelObj1);

                                                } catch (JSONException e) {
                                                    Toast.makeText(getActivity(), 
                                                            e.getMessage(), Toast.LENGTH_LONG).show();
                                                    e.printStackTrace();
                                                }
                                            }






                                            ListModelObj.setJSONData(ListItemsData1);

                                            ListModelObj.setViewPage_id(i);




                                            ListItemsData.add(ListModelObj);

                                        } catch (JSONException e) {
                                            Toast.makeText(getActivity(), 
                                                    e.getMessage(), Toast.LENGTH_LONG).show();
                                            e.printStackTrace();
                                            PostLogcatErorrs(e);
                                        }
                                    }

                                     viewPager = (CustomViewPager) rootView.findViewById(R.id.pager);
                                    viewPager.setCurrentItem(0);    

                                     adapter = new ViewPagerAdapter(getActivity(), ListItemsData , getActivity().getFragmentManager());
                                    // Binds the Adapter to the ViewPager

                                    viewPager.setAdapter(adapter);  
                                    //adapter.notifyDataSetChanged();
                                    viewPager.setCurrentItem(ClickListID);  
                                    viewPager.setOffscreenPageLimit(3);
                                    //adapter.notifyDataSetChanged();

                                    //viewPager.setOffscreenPageLimit(3);

                                }
                            }, new Response.ErrorListener() { 
                                @Override
                                public void onErrorResponse(VolleyError error) {





                                }
                            });

                    AppController.getInstance().addToRequestQueue(movieReq);
        } catch (Exception e) {
            Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG)
                    .show();
            e.printStackTrace();
            PostLogcatErorrs(e);
        }


    }
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
试一试{
holder.swipelisview.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_MOVE:
                view.getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                view.getParent().requestDisallowInterceptTouchEvent(false);
                break;
        }
        return false;
    }
});
public class NonSwipeableViewPager extends ViewPager {

    public NonSwipeableViewPager(Context context) {
    super(context);
    } 

    public NonSwipeableViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    } 

   @Override 
  public boolean onInterceptTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages 
    return false; 
  } 

  @Override 
  public boolean onTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages 
    return false; 
  } 
}