У меня есть ViewPager, реализованный без фрагмента (просто просмотр). Каждая страница содержит список элементов. С помощью свайпа я могу получить доступ к следующей странице ViewPager, а с помощью события щелчка я могу отобразить информацию о выбранном элементе.
Чтобы различать действия щелчка и пролистывания, я реализовал TouchListener для каждого элемента списка:
public boolean onTouch(View v, MotionEvent event) {
int move = event.getAction();
switch(move){
case MotionEvent.ACTION_DOWN:
lastX = event.getX();
lastY = event.getY();
//mViewPager.dispatchTouchEvent(event);
return true;
case MotionEvent.ACTION_UP:
float diffX = Math.abs(lastX-event.getX());
float diffY = Math.abs(lastY-event.getY());
if(diffX < incertitude && diffY < incertitude){
Bundle b = new Bundle();
b.putString(HOME_TITLE,n.getTitle());
b.putString(HOME_DESCR,n.getArticle());
FragmentManager fm = me().getFragmentManager();
HomeDialogFragment mDialogFragment = new HomeDialogFragment();
mDialogFragment.setArguments(b);
mDialogFragment.show(fm,"home_dialog_fragment");
return true;
}
default:
return false;
}
}
Это решение не работает идеально, и я не знаю, почему. Каждый элемент списка в основном состоит из нескольких TextView. Действие щелчка работает хорошо, но у меня есть некоторые проблемы с движением смахивания.
Когда я пытаюсь провести пальцем по элементу, он работает (я могу получить доступ к следующей странице). С другой стороны, это вообще не работает, когда я прокручиваю, начиная с одного из TextView:
(Спасибо Stack за то, что не разрешили мне опубликовать полезное изображение...) http://www.hostingpics.net/viewer.php?id=829040170.png
Когда я инициирую движение смахивания из одной из областей «оранжевого фона» (одной из текстовых представлений), ничего не происходит. В противном случае все в порядке. И я не понимаю, почему...
XML-файл элемента списка:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/home_screen"
android:layout_width="match_parent"
android:layout_height="?android:listPreferredItemHeightLarge"
android:divider="?android:dividerVertical"
android:dividerPadding="8dp"
android:orientation="horizontal"
android:showDividers="middle">
<TextView
android:id="@+id/home_title"
style="?android:textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:gravity="center"
android:layout_marginLeft="100dp"
android:textColor="@color/news_title"
android:layout_alignParentRight="false"
android:layout_alignParentTop="false"
android:textStyle="bold"
android:textSize="30dp"
android:layout_marginTop="10dp"
android:singleLine="true"
android:ellipsize="end"
android:layout_marginRight="30dp"
android:background="@android:color/holo_orange_light"
android:text="Titre principal"/>
<TextView
android:id="@+id/home_description"
style="?android:textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:gravity="center"
android:layout_marginLeft="100dp"
android:textColor="@color/news_subtitle"
android:layout_alignParentRight="false"
android:layout_alignParentBottom="false"
android:layout_marginTop="40dp"
android:singleLine="true"
android:ellipsize="end"
android:layout_marginRight="30dp"
android:text="Description sommaire"
android:background="@android:color/holo_orange_light"/>
...
</RelativeLayout>
Спасибо за вашу помощь !