Сначала я раздуваю макет, а затем добавляю представление к нему с помощью addView(). В макете прикреплен OnLongClickListener.Android - проблема с OnClickListener и OnLongClickListener
Если я теперь добавлю OnClickListener во внутренний вид, OnLongClickListener больше не срабатывает. Как я могу это исправить?
Пример кода:
View someLayout = getLayoutInflater().inflate(R.layout.some_layout, null);
someLayout.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View arg0) {
...
return true;
}
});
TextView innerView = new TextView(this);
innerView.setText("JustSomeTextThatDoesNotMatter");
innerView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
...
);
}
});
((FrameLayout) view.findViewById(R.id.framelayout)).addView(innerView);
Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center" >
<FrameLayout
android:id="@+id/framelayout"
android:layout_width="300dp"
android:layout_height="wrap_content">
</FrameLayout>
</LinearLayout>
Любые идеи? Это действительно кажется странным.
Обновление: То же самое происходит, когда я использую onTouchListener вместо onLongClickListener, OnClickListener во внутреннем представлении потребляет все события касания.
Это по дизайну? В основном я хочу использовать те же функции, что и ContextMenu для ListView.
Простейшим решением было бы добавить такой же OnLongClickListener в innerView. Более сложным решением было бы реализовать метод onInterceptTouchEvent() в родительском LinearLayout и реализовать там LongPressListener. –
Просто убедитесь, что вы следуете правилу возвращаемого значения onLongClickListener. Значит, если вы хотите передать длинный клик на родительский вид, тогда верните false, иначе верните true. http://developer.android.com/reference/android/view/View.OnLongClickListener.html – AndRSoid
Я предполагаю, что 'OnLongClick()' прослушиватель больше не срабатывает только для «TextView», но в другом месте находится макет? – Kerry