2015-03-05 2 views
1

Я ищу код, который позволил бы мне щелкнуть по изображениюView 3 раза, чтобы открыть диалоговое окно. Это было бы очень полезно, спасибо!Android - Нажмите на изображение несколько раз, чтобы открыть диалоговое окно

Вот мой код:

package natanrosenfeld.texteditor; 
    import android.content.Intent; 
    import android.support.v7.app.ActionBarActivity; 
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.ImageView; 
    import android.widget.Toast; 
    import android.app.AlertDialog; 
    import android.content.DialogInterface; 
    import android.view.View.OnClickListener; 
    import com.natanrosenfeld.texteditor.R; 
    import java.util.concurrent.atomic.AtomicInteger; 
    import android.os.Handler; 
    import java.lang.Runnable; 

    public class CreditsActivity extends ActionBarActivity{ 
    private AtomicInteger mCounter = new AtomicInteger(); 
    private Handler handler = new Handler(); 
    private Runnable mRunnable = new Runnable() { 

     @Override 
     public void run() { 
      mCounter = new AtomicInteger(); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Utils.onActivityCreateSetTheme(this); 
     setContentView(R.layout.activity_credits); 
     ImageView img = (ImageView) findViewById(R.id.imageView); 
     addClickToImage(img); 

    } 


    public void addClickToImage(ImageView imageView) { 
     imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       handler.removeCallbacks(mRunnable); 
       handler.postDelayed(mRunnable, 1000); 
       if (mCounter.incrementAndGet() == 2) { 
        //Display your dialog fragment 
        new AlertDialog.Builder(getApplicationContext()) 
          .setTitle("Easter Egg") 
          .setMessage("Easter Egg...") 
          .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int which) { 
            // continue with delete 
           } 
          }) 
          .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int which) { 
            // do nothing 
           } 
          }) 
          .show(); 
        } 
       } 
      }); 
     } 
    } 



ddmlib: Broken pipe 
java.io.IOException: Broken pipe 
at sun.nio.ch.FileDispatcherImpl.write0(Native Method) 
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) 
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) 
at sun.nio.ch.IOUtil.write(IOUtil.java:65) 
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:487) 
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213) 
at com.android.ddmlib.Client.sendAndConsume(Client.java:675) 
at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:342) 
at com.android.ddmlib.Client.requestAllocationStatus(Client.java:521) 
at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:847) 
at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:815) 
at  
com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:633) 
at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:46) 
at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:592) 

ответ

2

Здесь у вас есть способ справиться с 3 клика, даже если вы хотите, чтобы манипулировать счетчик из других потоков. Он добавляет щелчок слушателя и ждет 1 секунду, чтобы поставить счетчик кликов 0.

public class MyActivity extends Activity{ 
private AtomicInteger mCounter = new AtomicInteger(); 
private Handle handler = new Handler(); 
private Runnable mRunnable = new Runnable(){ 
    @Override 
    public void run(){ 
     mCounter = new AtomicInteger(); 
    } 
} 

public void onCreate(Bundle savedInstance){ 
    ... 
    ImageView myImage = (ImageView) findViewById(R.id.imageView); 
    addClickToImage(myImage); 
} 

public void addClickToImage(ImageView image){ 
    image.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      handler.removeCallback(mRunnable); 
      handler.postDelayed(mRunnable, 1000); 
      if(mCounter.incrementAndGet() == 3){ 
       //Display your dialog fragment 
      } 
     } 
    }); 
} 
} 

Ошибка 2 Вы открываете ваш диалог, предоставляя контекст приложения. Вот строка:

new AlertDialog.Builder(getApplicationContext()) 

Единственный контекст, который может открывать диалоги, - это текущий контекст активности, а не приложение. Поэтому, чтобы исправить эту ошибку:

new AlertDialog.Builder(CreditsActivity.this) 
Смежные вопросы