Дескриптор TextView LongClick, щелчок родительского дескриптора textview

У меня есть RelativeLayout с TextView дочерним элементом, когда я настроил прослушиватель длинных щелчков для текстового представления и установил прослушиватель щелчков для родительского макета, как показано ниже:

textview.setOnLongClickListener(new OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                Toast.makeText(getContext(), "longclick", Toast.LENGTH_SHORT).show();
                return true;
            }
        });

layout.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getContext(), "layout onclick", Toast.LENGTH_SHORT).show();
            }
        });

Как мне обработать прослушиватель кликов макета при нажатии на текстовое представление? Я также использую GestureDetector для обработки, но событие ondown должно возвращать истину, поэтому родительское представление не может обрабатывать прослушиватель onclick.


person user9709179    schedule 27.04.2018    source источник
comment
post xml также ...   -  person dev    schedule 27.04.2018


Ответы (2)


Вам также необходимо установить ClickListener() на свой textview

проверьте приведенный ниже проверенный пример, он будет работать для вас

Попробуй это

public class MainActivity extends AppCompatActivity {


    TextView mTitle;
    LinearLayout toolbarIcon;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTitle = (TextView) findViewById(R.id.toolbar_title);
        toolbarIcon = (LinearLayout) findViewById(R.id.toolbarIcon);
        mTitle.setText("Nilesh Rathod");


        mTitle.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                View parent = (View) v.getParent();
                parent.performClick();
            }
        });

        mTitle.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Toast.makeText(MainActivity.this, "mTitle Clicked", Toast.LENGTH_SHORT).show();
                return true;
            }
        });

        toolbarIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "toolbarIcon Clicked", Toast.LENGTH_SHORT).show();
            }
        });
    }

}

ПЛАН

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbarIcon"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical">


    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:textStyle="bold" />


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="Nilesh"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="Nilesh"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="Nilesh"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="Nilesh"
        android:textStyle="bold" />


</LinearLayout>
person AskNilesh    schedule 27.04.2018
comment
Спасибо, есть ли способ переопределить текстовое представление или макет и использовать диспетчер событий или перехватить событие касания для этого? Я хочу написать собственное представление, чтобы сделать это более распространенным. - person user9709179; 27.04.2018

Почему бы вам не использовать оба ClickListener в вашем относительном макете: один длинный и один обычный.

layout.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

   Toast.makeText(HomeSafeActivity.this, "Normal Press", Toast.LENGTH_LONG).show();

});

layout.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {

        Toast.makeText(HomeSafeActivity.this, "Long preess", Toast.LENGTH_LONG).show();

        return true;
    }
});
person Shafin Raza    schedule 27.04.2018
comment
Спасибо за ваш ответ, я просто хочу, чтобы обработчик textview обрабатывал длинный щелчок, родительский макет обрабатывал один щелчок, когда я нажимаю на textview или на макет, событие щелчка дескриптора макета - person user9709179; 27.04.2018