2013-03-11 46 views
1

我想那個按鈕1,2,3響應一個longclick,用戶會提示輸入文本的按鈕。的onCreate的 我在裏面寫道:setonlongclicklistener一次爲幾個按鈕

Button botonEditable; 
Context context; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    context = MainActivity.this; 
    Resources r = getResources(); 
    String pName = getPackageName(); 

    for (int i=1;i<4;i++){ 
    botonEditable = (Button) findViewById(r.getIdentifier("button" + i, "id", pName)); 
    botonEditable.setOnLongClickListener(new View.OnLongClickListener() { 
     public boolean onLongClick(View v) { 
      final AlertDialog.Builder alert = new AlertDialog.Builder(context); 
      alert.setMessage("Nueva Categoria:"); 
      final EditText input = new EditText(context); 
      alert.setView(input); 
      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton ) { 
        // Do something with value! 
        String newCateg = input.getText().toString(); 
        botonEditable.setText(newCateg); 
       } 
      }); 

      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        // Canceled. 
       } 
      });   
      alert.show();     
      return true; 
     } 
    }); 
    } 
} 

當這個測試中,3個按鈕相應地響應顯示一個警告消息,但是當我輸入文字,然後點擊確定,文本僅在BUTTON3改變,無論哪個按鈕被longclicked :( 什麼這是錯誤的,如何用簡單的方法解決這個問題?

+0

超出範圍:你爲什麼要存儲的強引用該活動的背景?我認爲這是不好的做法,刪除屬性**上下文上下文**並在需要時使用** this **。 – Leeeeeeelo 2013-03-11 07:42:45

回答

0

我找到了解決辦法,在我的代碼我只是這一個

public boolean onLongClick(final View v) {.... 
取代了線

public boolean onLongClick(View v) {.... 

加你的建議:

((Button)v).setText(newCateg.toUpperCase()); 

現在,一切都很好。 Thankyou傢伙,你的幫助讓我以毫米的解決方案。
:)

1

試試這個

button.setOnLongClickListener(new longClcik()); 


class longClcik implements OnLongClickListener { 

    public boolean onLongClick(View v) { 
     return false; 

    } 
} 
1

試試這個..將以下代碼

public void onClick(DialogInterface dialog, int whichButton ) { 
        // Do something with value! 
        String newCateg = input.getText().toString(); 
        botonEditable.setText(newCateg); 
       } 

public void onClick(DialogInterface dialog, int whichButton ) { 
        // Do something with value! 
        String newCateg = input.getText().toString(); 
        ((Button)v).setText(newCateg); 
       } 
1

您應該使用View傳遞給OnLongClickListener。這會給你當前點擊查看和更新​​它的值,所以不是做這個

botonEditable.setOnLongClickListener(new View.OnLongClickListener() { 
    public boolean onLongClick(View v) { 
     final AlertDialog.Builder alert = new AlertDialog.Builder(context); 
     alert.setMessage("Nueva Categoria:"); 
     final EditText input = new EditText(context); 
     alert.setView(input); 
     alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton ) { 
       // Do something with value! 
       String newCateg = input.getText().toString(); 
       ((Button)v).setText(newCateg); //<-- see the botonEditable changed to v 
      } 
     }); 

     alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       // Canceled. 
      } 
     });   
     alert.show();     
     return true; 
    } 
}); 
+0

不起作用。我試過你的建議傢伙@Praful Bhatnagar,但是Eclipse抱怨說:「不能用一種不同的方法定義的內部類中的非最終變量v」。這就是爲什麼我將botonEditable定義爲全局變量,這是所有方法都可以看到的,我是否正確?我只是一個直觀的android開發人員。我知道我必須閱讀更多關於Java的內容。 – JoeCoolman 2013-03-11 18:22:13

+0

是的,當然我忘了做視圖決賽! – Neil 2013-03-13 04:29:36

0

我做了這種方式:

  1. 首先u必須實現你的課View.OnLongClickListener
  2. 其次超越控制方法onLongClick

    @Override
    public boolean onLongClick(View v){
    onChe ckboxLongClicked(V);
    返回true;
    }

  3. 創建方法onCheckBoxLongClicked這是無效的。或U可以實現烏爾開關等內部onLongClick

    開關(view.getId()){
    情況R.id.cbDigits:
    Toast.makeText(getActivity(), 「消息」,Toast.LENGTH_SHORT) 。顯示();
    break;



    }

很抱歉,但我仍然不知道如何格式化代碼來獲得縮進...

+0

謝謝Maruban,我會考慮你未來的作品。現在我正在處理Blender和VBA Excel,所以現在有幾個Android項目延遲了,但我很快就會接受它們。 – JoeCoolman 2013-11-04 01:04:23