2014-02-20 7 views
2

Я создаю пользовательский тост для моего приложения. Мне нужно добавить OnClickListener на кнопку, которую я добавил на Toast. Все идет хорошо, я вижу кнопку, но не реагирует на OnClick. Есть идеи.Могу ли я добавить Clickener в пользовательский Toast

Пример кода:

Button button = new Button(getApplicationContext()); 
      button.setText("Click Me"); 
      button.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        ProgressDialog.show(getApplicationContext(), "Hello", "nothing"); 

       } 
      }); 
     button.setLayoutParams(new  ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); 
     Toast toast = new Toast(getApplicationContext()); 
     toast.setGravity(Gravity.BOTTOM, 0, 0); 
     toast.setMargin(0,-80); 
     toast.setDuration(Toast.LENGTH_LONG); 
     toast.setView(button); 
     toast.show(); 

Кроме того, я попытался, добавив onTouchListener к кнопке, как это.

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     ProgressDialog.show(getApplicationContext(), "Hello", "nothing"); 
     return false; 
    } 
}); 

Но это также не работает.

+1

вместо тоста использовать диалоговый – Raghunandan

+0

виды не щелкать-состоянии внутри Toast поэтому используйте AlertDialog или popupwindow. –

+0

Использование кнопки на тосте - плохая идея. Используйте диалог – JesusS

ответ

1

Вы не должны включать Button в Toast. Просто покажите кнопку, затем спрячьте ее через некоторое время. Вы можете сделать это, добавив RelativeLayout поверх существующего макета. Нечто подобное должно работать:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <include layout="@layout/main" /><!-- References your existing layout file --> 
    <Button 
     android:id="@+id/toast_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentBottom="true" 
     android:visibility="gone" 
     android:text="@string/click_me" 
     android:onClick="showDialog" /><!-- Should reference a String resource "click me"--> 
</RelativeLayout> 

Теперь создайте Toast эффект, добавьте следующий метод к вашему Activity:

public void showDialog(View v) { 
    if (v.getId() == R.id.toast_button) { 
     ProgressDialog.show(this, "Hello", "nothing"); 
    } 
} 

Тогда в onCreate, показать кнопку как в Toast:

final Button b = (Button) findViewById(R.id.toast_button); 
//optionally add some animations for fading in 
b.setVisibility(View.VISIBLE); 
Timer t = new Timer(); 
t.schedule(new TimerTask() { 
    @Override 
    public void run() { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       //optionally add some animations for fading out 
       b.setVisibility(View.GONE); 
      } 
     }); 
    } 
}, 1000); 
+0

Это не тот случай, когда Фил. Кнопка не получает событие click. – Adnan

+0

@Adnan см. Мой пересмотренный ответ – Phil