Parçalardaki XML onClick'i kullanarak düğme tıklamalarını işleme


440

Petek Öncesi (Android 3), her Etkinlik, onClickbir Düzen'in XML'sindeki etiket üzerinden düğme tıklamalarını işlemek üzere kaydedildi :

android:onClick="myClickMethod"

Bu yöntemde view.getId()ve düğme mantığını yapmak için bir switch deyimi kullanabilirsiniz.

Honeycomb'un tanıtılmasıyla bu Faaliyetleri birçok farklı Faaliyette tekrar kullanılabilecek Parçalara ayırıyorum. Düğmelerin davranışın çoğu Etkinlik bağımsızdır ve ben fragmanlar dosya içindeki ikamet etme kodu istiyorum olmadan kayıt eski (1.6 pre) yöntemini kullanarak OnClickListenerher düğme için.

final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Perform action on click
    }
});

Sorun, benim düzeni şişirildiğinde hala tek tek parçaları değil, düğme tıklama alır barındırma etkinliği olmasıdır. İkisine de iyi bir yaklaşım var mı

  • Düğme tıklamaları almak için parçayı kaydettir?
  • Etkinlikteki tıklama etkinlikleri, ait oldukları parçaya mı aktarılır?

1
Parçanın onCreate içindeki kayıt dinleyicilerini idare edemiyor musunuz?
CL22

24
@jodes Evet, ancak kullanmak istemiyorum setOnClickListenerve findViewByIdher düğme için, onClickişleri kolaylaştırmak için bu yüzden eklendi.
smith324

4
Kabul edilen cevaba baktığımda setOnClickListener kullanmanın XML onClick yaklaşımına bağlı kalmaktan daha gevşek olduğunu düşünüyorum. Etkinliğin her tıklamayı sağ parçaya 'iletmesi' gerekiyorsa, bu, bir parça her eklendiğinde kodun değişmesi gerektiği anlamına gelir. Parçanın temel sınıfından ayrıştırmak için bir arabirim kullanmak buna yardımcı olmaz. Parça doğru düğmenin kendisine kaydolursa, etkinlik tamamen agnostik kalır, bu da daha iyi stil IMO'dur. Ayrıca bkz. Adorjan Princz'un yanıtı.
Adriaan Koster

@ smith324 bu konuda Adriaan ile anlaşmak zorunda. Adorjan'ın cevabını bir deneyin ve hayatın bundan sonra daha iyi olmadığını görün.
user1567453

Yanıtlar:


175

Sadece bunu yapabilirsin:

Aktivite:

Fragment someFragment;    

//...onCreate etc instantiating your fragments

public void myClickMethod(View v) {
    someFragment.myClickMethod(v);
}

Fragment:

public void myClickMethod(View v) {
    switch(v.getId()) {
        // Just like you were doing
    }
}    

@Ameen'e yanıt olarak daha az kuplaj isteyen, böylece Parçalar tekrar kullanılabilir

Arayüz:

public interface XmlClickable {
    void myClickMethod(View v);
}

Aktivite:

XmlClickable someFragment;    

//...onCreate, etc. instantiating your fragments casting to your interface.
public void myClickMethod(View v) {
    someFragment.myClickMethod(v);
}

Fragment:

public class SomeFragment implements XmlClickable {

//...onCreateView, etc.

@Override
public void myClickMethod(View v) {
    switch(v.getId()){
        // Just like you were doing
    }
}    

52
Şu anda yaptığım şey budur, ancak her birinin tıklama etkinliklerini alması gereken birden fazla parçanız olduğunda çok daha karışıktır. Genel olarak sadece parçalara maruz kalıyorum çünkü paradigmalar etraflarında çözüldü.
smith324

128
Aynı sorunla karşılaşıyorum ve yanıtınızı takdir etsem de, bu yazılım mühendisliği açısından temiz bir kod değil. Bu kod, aktivitenin fragman ile sıkıca birleştirilmesine yol açar. Aynı parçayı, parçaların uygulama ayrıntılarını bilmeden faaliyetler olmadan birden fazla aktivitede yeniden kullanabilmelisiniz.
Ameen

1
"Switch (v.getId ()) {" olmalı ve "switch (v.getid ()) {" olmamalıdır
eb80

5
Kendi Arayüzünüzü tanımlamak yerine, halihazırda mevcut olan OnClickListener'ı Euporie tarafından belirtildiği gibi kullanabilirsiniz.
fr00tyl00p

1
Bunu okuduğumda ağladım, ÇOK ÇOK BOILERPLATE ... @AdorjanPrincz aşağıdaki cevap gitmek için yol.
Wjdavis5

603

OnClick olaylarını işlemek için aşağıdaki çözümü kullanmayı tercih ederim. Bu, Etkinlik ve Parçalar için de geçerlidir.

public class StartFragment extends Fragment implements OnClickListener{

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

        View v = inflater.inflate(R.layout.fragment_start, container, false);

        Button b = (Button) v.findViewById(R.id.StartButton);
        b.setOnClickListener(this);
        return v;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.StartButton:

            ...

            break;
        }
    }
}

9
OnCreateView, ViewGroup v tüm alt öğeleri döngü ve bulduğum tüm Button örnekleri için onclicklistener ayarlayın. Dinleyiciyi tüm düğmeler için manuel olarak ayarlamaktan çok daha iyidir.
Bir Kişi

17
Oy kullandı. Bu, parçaları yeniden kullanılabilir hale getirir. Aksi halde neden parçalar kullanılıyor?
boreas

44
1987'de Programlama Pencereleri tarafından savunulan aynı teknik değil mi? Endişe etmeyin. Google hızlı hareket eder ve tamamen geliştirici verimliliği ile ilgilidir. Olay işleme 1991-eara Visual Basic kadar iyi kadar uzun olmayacak eminim.
Edward Brey

7
cadı içe aktarma OnClickListener için kullandınız mı? Intellij bana android.view.View.OnClickListener'ı önerir ve çalışmaz: / (onClick asla çalışmaz)
Lucas Jota

4
@NathanOsman Soru xml onClick ile ilgili olduğunu düşünüyorum, bu yüzden kabul edilen ve kesin çözüm sağlar.
Naveed Ahmad

29

Bence sorun, görüşün hala parça değil, faaliyet olmasıdır. Parçaların kendi bağımsız bir görüşü yoktur ve ana faaliyetler görünümüne eklenir. Bu yüzden olay, etkinlik değil, sonuçta sona erer. Bu talihsiz, ama bu işi yapmak için bazı koda ihtiyacınız olacağını düşünüyorum.

Dönüşümler sırasında yaptığım şey, eski olay işleyiciyi çağıran bir tıklama dinleyici eklemektir.

Örneğin:

final Button loginButton = (Button) view.findViewById(R.id.loginButton);
loginButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(final View v) {
        onLoginClicked(v);
    }
});

1
Teşekkürler - Ben parça görünümü (yani inflater.inflate (R.layout.my_fragment_xml_resource)) parçası görünümleri onLoginClicked () için geçiyor ki hafif bir değişiklikle kullandım, gibi EditText gibi, view.findViewById () (Eğer sadece etkinlik görünümünden geçersem, view.findViewById (R.id.myfragmentwidget_id) çağrıları null döndürür).
Michael Nelson

Bu, projemde API 21 ile çalışmaz. Bu yaklaşımın nasıl kullanılacağı hakkında düşünceleriniz var mı?
Darth Coder

Hemen hemen her uygulamada kullanılan oldukça temel kodu. Sizin için neler olduğunu anlatabilir misiniz?
Brill Pappin

1
Parçanın düzeni etkinliğin görünümüne eklendiği için oluşan sorunun açıklaması için bu cevaba oy verin.
fllo

25

Geçenlerde bağlam Etkinliği için bir yöntem eklemek veya OnClickListener uygulamak zorunda kalmadan bu sorunu çözdüm. Bunun "geçerli" bir çözüm olup olmadığından emin değilim, ama işe yarıyor.

Tabanlı: https://developer.android.com/tools/data-binding/guide.html#binding_events

Veri bağlamaları ile yapılabilir: Parça örneğinizi değişken olarak eklemeniz yeterlidir, ardından herhangi bir yöntemi onClick'e bağlayabilirsiniz.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.testapp.fragments.CustomFragment">

    <data>
        <variable android:name="fragment" android:type="com.example.testapp.fragments.CustomFragment"/>
    </data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_place_black_24dp"
            android:onClick="@{() -> fragment.buttonClicked()}"/>
    </LinearLayout>
</layout>

Ve parça bağlama kodu ...

public class CustomFragment extends Fragment {

    ...

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_person_profile, container, false);
        FragmentCustomBinding binding = DataBindingUtil.bind(view);
        binding.setFragment(this);
        return view;
    }

    ...

}

1
Sadece bir his var, bu çözüm işini alamadığım için bazı detaylar eksik
Tima

Belki de dokümantasyondaki "Yapı Ortamı" ndan bir şey eksik: developer.android.com/tools/data-binding/…
Aldo Canepa

@Aldo XML'deki onClick yöntemi için bunun yerine android kullanmanız gerektiğine inanıyorum: onClick = "@ {() -> fragman. ButtonClicked ()}". Ayrıca diğerleri için, parçanın içindeki buttonClicked () işlevini bildirmeli ve mantığınızı içine koymalısınız.
Hayk Nahapetyan

android:name="fragment" android:type="com.example.testapp.fragments.CustomFragment"/>
xml'de

1
Sadece bu ve denenmiş nameve typeniteliklerini variablegerektiği etiketi değil sahip android:önek. Belki de gerektiren Android düzenlerinin eski bir sürümü var mı?
JohnnyLambada

6

ButterKnife muhtemelen dağınıklık sorunu için en iyi çözümdür. "Eski yöntem" kazan plakası kodunu oluşturmak için ek açıklama işlemcileri kullanır.

Ancak, onClick yöntemi yine de özel bir şişirme ile kullanılabilir.

Nasıl kullanılır

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup cnt, Bundle state) {
    inflater = FragmentInflatorFactory.inflatorFor(inflater, this);
    return inflater.inflate(R.layout.fragment_main, cnt, false);
}

uygulama

public class FragmentInflatorFactory implements LayoutInflater.Factory {

    private static final int[] sWantedAttrs = { android.R.attr.onClick };

    private static final Method sOnCreateViewMethod;
    static {
        // We could duplicate its functionallity.. or just ignore its a protected method.
        try {
            Method method = LayoutInflater.class.getDeclaredMethod(
                    "onCreateView", String.class, AttributeSet.class);
            method.setAccessible(true);
            sOnCreateViewMethod = method;
        } catch (NoSuchMethodException e) {
            // Public API: Should not happen.
            throw new RuntimeException(e);
        }
    }

    private final LayoutInflater mInflator;
    private final Object mFragment;

    public FragmentInflatorFactory(LayoutInflater delegate, Object fragment) {
        if (delegate == null || fragment == null) {
            throw new NullPointerException();
        }
        mInflator = delegate;
        mFragment = fragment;
    }

    public static LayoutInflater inflatorFor(LayoutInflater original, Object fragment) {
        LayoutInflater inflator = original.cloneInContext(original.getContext());
        FragmentInflatorFactory factory = new FragmentInflatorFactory(inflator, fragment);
        inflator.setFactory(factory);
        return inflator;
    }

    @Override
    public View onCreateView(String name, Context context, AttributeSet attrs) {
        if ("fragment".equals(name)) {
            // Let the Activity ("private factory") handle it
            return null;
        }

        View view = null;

        if (name.indexOf('.') == -1) {
            try {
                view = (View) sOnCreateViewMethod.invoke(mInflator, name, attrs);
            } catch (IllegalAccessException e) {
                throw new AssertionError(e);
            } catch (InvocationTargetException e) {
                if (e.getCause() instanceof ClassNotFoundException) {
                    return null;
                }
                throw new RuntimeException(e);
            }
        } else {
            try {
                view = mInflator.createView(name, null, attrs);
            } catch (ClassNotFoundException e) {
                return null;
            }
        }

        TypedArray a = context.obtainStyledAttributes(attrs, sWantedAttrs);
        String methodName = a.getString(0);
        a.recycle();

        if (methodName != null) {
            view.setOnClickListener(new FragmentClickListener(mFragment, methodName));
        }
        return view;
    }

    private static class FragmentClickListener implements OnClickListener {

        private final Object mFragment;
        private final String mMethodName;
        private Method mMethod;

        public FragmentClickListener(Object fragment, String methodName) {
            mFragment = fragment;
            mMethodName = methodName;
        }

        @Override
        public void onClick(View v) {
            if (mMethod == null) {
                Class<?> clazz = mFragment.getClass();
                try {
                    mMethod = clazz.getMethod(mMethodName, View.class);
                } catch (NoSuchMethodException e) {
                    throw new IllegalStateException(
                            "Cannot find public method " + mMethodName + "(View) on "
                                    + clazz + " for onClick");
                }
            }

            try {
                mMethod.invoke(mFragment, v);
            } catch (InvocationTargetException e) {
                throw new RuntimeException(e);
            } catch (IllegalAccessException e) {
                throw new AssertionError(e);
            }
        }
    }
}

6

onClickParçalar ile çalışırken XML özniteliğini kullanmak yerine kodda tıklama işleme için gitmek istiyorum .

Etkinliklerinizi parçalara geçirirken bu daha da kolaylaşır. Tıklama işleyicisini (önceden android:onClickXML olarak ayarlanmış ) doğrudan her casebloktan çağırabilirsiniz .

findViewById(R.id.button_login).setOnClickListener(clickListener);
...

OnClickListener clickListener = new OnClickListener() {
    @Override
    public void onClick(final View v) {
        switch(v.getId()) {
           case R.id.button_login:
              // Which is supposed to be called automatically in your
              // activity, which has now changed to a fragment.
              onLoginClick(v);
              break;

           case R.id.button_logout:
              ...
        }
    }
}

Parçalardaki tıklamaları işleme söz konusu olduğunda, bu bana göre daha basit görünüyor android:onClick.


5

Bu başka bir yol :

1.B böyle bir BaseFragment oluşturun:

public abstract class BaseFragment extends Fragment implements OnClickListener

2.Use

public class FragmentA extends BaseFragment 

onun yerine

public class FragmentA extends Fragment

3. faaliyetinizde:

public class MainActivity extends ActionBarActivity implements OnClickListener

ve

BaseFragment fragment = new FragmentA;

public void onClick(View v){
    fragment.onClick(v);
}

Umarım yardımcı olur.


Cevabınızdan 1 yıl, 1 ay ve 1 gün sonra: Soyut BaseFragment'ı oluşturmak için her Fragment sınıfında OnClickListener uygulamasını tekrarlamamaktan başka bir neden var mı?
Dimitrios K.

5

Benim kullanım durumunda, tek bir onClick yöntemine kanca için gereken 50 tek ImageViews var. Benim çözüm parçası içinde görünümler üzerinde döngü ve her biri aynı onclick dinleyici ayarlamak için:

    final View.OnClickListener imageOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            chosenImage = ((ImageButton)v).getDrawable();
        }
    };

    ViewGroup root = (ViewGroup) getView().findViewById(R.id.imagesParentView);
    int childViewCount = root.getChildCount();
    for (int i=0; i < childViewCount; i++){
        View image = root.getChildAt(i);
        if (image instanceof ImageButton) {
            ((ImageButton)image).setOnClickListener(imageOnClickListener);
        }
    }

2

Cevapları gördüğümde bir şekilde yaşlılar. Son zamanlarda Google , xCl'nize onClick veya atamak için çok daha kolay olan DataBinding'i tanıttı .

İşte bununla nasıl başa çıkabileceğinizi gösteren iyi bir örnek:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="handlers" type="com.example.Handlers"/>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.firstName}"
           android:onClick="@{user.isFriend ? handlers.onClickFriend : handlers.onClickEnemy}"/>
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.lastName}"
           android:onClick="@{user.isFriend ? handlers.onClickFriend : handlers.onClickEnemy}"/>
   </LinearLayout>
</layout>

Bulabilmek DataBinding hakkında çok güzel ders de vardır İşte .


2

Bir geri aramayı XML düzeninizin bir özelliği olarak tanımlayabilirsiniz. Özel Android Widget'larınız için Özel XML Öznitelikleri makalesi , özel bir widget için nasıl yapılacağını gösterecektir. Kredi Kevin Dion'a gidiyor :)

Temel Fragment sınıfına stilize nitelikler ekleyip ekleyemeyeceğimi araştırıyorum.

Temel fikir, onClick geri aramasıyla ilgilenirken View uygulamasının uyguladığı işlevselliklere sahip olmaktır.


1

Blundell'in cevabına ekleme
, Bol miktarda onClicks ile daha fazla parçanız varsa:

Aktivite:

Fragment someFragment1 = (Fragment)getFragmentManager().findFragmentByTag("someFragment1 "); 
Fragment someFragment2 = (Fragment)getFragmentManager().findFragmentByTag("someFragment2 "); 
Fragment someFragment3 = (Fragment)getFragmentManager().findFragmentByTag("someFragment3 "); 

...onCreate etc instantiating your fragments

public void myClickMethod(View v){
  if (someFragment1.isVisible()) {
       someFragment1.myClickMethod(v);
  }else if(someFragment2.isVisible()){
       someFragment2.myClickMethod(v);
  }else if(someFragment3.isVisible()){
       someFragment3.myClickMethod(v); 
  }

} 

Parçanızda:

  public void myClickMethod(View v){
     switch(v.getid()){
       // Just like you were doing
     }
  } 

1

Android kullanarak xml'ye kaydolursanız: Onclick = "", parçanızın bağlamı (getActivity ()) ait olduğu saygın Aktiviteye geri çağrı yapılır. Faaliyette böyle bir yöntem bulunamazsa, sistem bir istisna atar.


teşekkürler, kimse neden çökme olduğunu açıkladı

1

Ayrılmış olaylar için EventBus'u kullanmayı düşünebilirsiniz .. Olayları çok kolay dinleyebilirsiniz. Ayrıca etkinliğin ui iş parçacığında alındığından da emin olabilirsiniz (her etkinlik aboneliği için kendiniz için runOnUiThread'i çağırmak yerine)

https://github.com/greenrobot/EventBus

Github'dan:

Etkinlikler, Parçalar, Konular, Hizmetler vb. Arasındaki iletişimi basitleştiren Android için optimize edilmiş olay veri yolu. Daha az kod, daha iyi kalite


1

Ben Adjorn LinkZ en eklemek istediğiniz cevap .

Birden fazla işleyiciye ihtiyacınız varsa, lambda referanslarını kullanabilirsiniz

void onViewCreated(View view, Bundle savedInstanceState)
{
    view.setOnClickListener(this::handler);
}
void handler(View v)
{
    ...
}

Buradaki hile, handleryöntemin imzasının imzayla eşleşmesidir View.OnClickListener.onClick. Bu şekilde,View.OnClickListener arayüze .

Ayrıca, herhangi bir anahtar ifadesine ihtiyacınız olmayacaktır.

Ne yazık ki, bu yöntem sadece tek bir yöntem veya bir lambda gerektiren arayüzlerle sınırlıdır.


1

Veri bağlamaya dayanan bazı güzel cevaplar tespit etsem de, bu yaklaşımla tam anlamıyla herhangi bir gidiş görmedim - XML'de parça içermeyen düzen tanımlarına izin verirken parça çözünürlüğünü etkinleştirmek anlamında.

Yani varsayarak veri bağlama olduğunu etkin , önerebileceğim genel bir çözüm; Biraz uzun ama kesinlikle işe yarıyor (bazı uyarılarla):

1. Adım: Özel OnClick Uygulaması

Bu, dokunulan görünümle ilişkili bağlamlarda (örn. Düğme) parçalara duyarlı bir arama gerçekleştirir:


// CustomOnClick.kt

@file:JvmName("CustomOnClick")

package com.example

import android.app.Activity
import android.content.Context
import android.content.ContextWrapper
import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import java.lang.reflect.Method

fun onClick(view: View, methodName: String) {
    resolveOnClickInvocation(view, methodName)?.invoke(view)
}

private data class OnClickInvocation(val obj: Any, val method: Method) {
    fun invoke(view: View) {
        method.invoke(obj, view)
    }
}

private fun resolveOnClickInvocation(view: View, methodName: String): OnClickInvocation? =
    searchContexts(view) { context ->
        var invocation: OnClickInvocation? = null
        if (context is Activity) {
            val activity = context as? FragmentActivity
                    ?: throw IllegalStateException("A non-FragmentActivity is not supported (looking up an onClick handler of $view)")

            invocation = getTopFragment(activity)?.let { fragment ->
                resolveInvocation(fragment, methodName)
            }?: resolveInvocation(context, methodName)
        }
        invocation
    }

private fun getTopFragment(activity: FragmentActivity): Fragment? {
    val fragments = activity.supportFragmentManager.fragments
    return if (fragments.isEmpty()) null else fragments.last()
}

private fun resolveInvocation(target: Any, methodName: String): OnClickInvocation? =
    try {
        val method = target.javaClass.getMethod(methodName, View::class.java)
        OnClickInvocation(target, method)
    } catch (e: NoSuchMethodException) {
        null
    }

private fun <T: Any> searchContexts(view: View, matcher: (context: Context) -> T?): T? {
    var context = view.context
    while (context != null && context is ContextWrapper) {
        val result = matcher(context)
        if (result == null) {
            context = context.baseContext
        } else {
            return result
        }
    }
    return null
}

Not: orijinal Android uygulamasına gevşek bir şekilde (bkz. Https://android.googlesource.com/platform/frameworks/base/+/a175a5b/core/java/android/view/View.java#3025 )

2. Adım: Düzen dosyalarında bildirici uygulama

Sonra, veri bağlama farkında XML'lerde:

<layout>
  <data>
     <import type="com.example.CustomOnClick"/>
  </data>

  <Button
    android:onClick='@{(v) -> CustomOnClick.onClick(v, "myClickMethod")}'
  </Button>
</layout>

Uyarılar

  • 'Modern' FragmentActivitytabanlı bir uygulama olduğunu varsayar.
  • Yığındaki yalnızca "en üstteki" (yani son ) parçanın arama yöntemi olabilir (gerçi , gerekirse düzeltilebilir)

0

Bu benim için çalışıyor: (Android stüdyosu)

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

        View rootView = inflater.inflate(R.layout.update_credential, container, false);
        Button bt_login = (Button) rootView.findViewById(R.id.btnSend);

        bt_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                System.out.println("Hi its me");


            }// end onClick
        });

        return rootView;

    }// end onCreateView

1
Bu, @Brill Pappin'in cevabını çoğaltır .
naXa

0

En iyi çözüm IMHO:

parça halinde:

protected void addClick(int id) {
    try {
        getView().findViewById(id).setOnClickListener(this);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void onClick(View v) {
    if (v.getId()==R.id.myButton) {
        onMyButtonClick(v);
    }
}

daha sonra Fragment'ın onViewStateRestored öğesinde:

addClick(R.id.myButton);

0

Etkinliğiniz, kullanılmış olması gereken geri aramayı alıyor:

mViewPagerCloth.setOnClickListener((YourActivityName)getActivity());

Parçanızın geri arama almasını istiyorsanız, bunu yapın:

mViewPagerCloth.setOnClickListener(this);

ve onClickListenerArabirimi parçaya uygula

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.