2014年6月19日 星期四

[Android]監聽 長按 事件

  先前介紹的OnClick()不須傳回任何值,但onLongClick() 必須一個布林值,表示是否引發「長按」事件,還是也要在之後手指放開時引發「按一下」事件。這是因為「長按」一定是包含在「按一下」的過程中,因此必須依靠傳回值,來告訴系統只要引發「長按」就好。

  一個用戶的操作會被傳遞到不同的前端物件的不同監聽方法處理,任何一個接收並處理了該次事件的方法如果在處理完後返回了 true,那麼該次 event 就算被完全處理了,其他的 View 或者監聽方法就不會再有機會處理該 event 了。


接續上一篇的內容:按一下 的事件處理範例

※下面得範例將要在長按按鈕後,將計數值歸0: MainActivity.java
package tw.mangolai.counter2;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
//匯入監聽器介面
import android.view.View.OnClickListener; 
//匯入監聽器介面
import android.view.View.OnLongClickListener; 
import android.widget.Button;
import android.widget.TextView;

//實作 OnLongClickListener介面
public class MainActivity extends Activity implements OnClickListener, OnLongClickListener { 
    TextView txv;  //用來參照 textView1 元件的變數
    Button btn;   //用來參照 button1 元件的變數
    int counter = 0; //用來儲存計數的值, 初值為 0

    @Override
    //實作監聽器介面中定義的 onClick方法
    public void onClick(View v) { // 實作監聽器介面中定義的 onClick方法
        // 將計數值加 1, 然後轉成字串顯示出來
        txv.setText(String.valueOf(++counter)+"顆鑽石"); 
    }

    @Override
    //實作長按 (OnLongClickListener 介面)的方法
    public boolean onLongClick(View v) { 
        counter = 0;
        txv.setText("0"+"顆鑽石");
        return true;
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找出要參照的物件
        txv = (TextView) findViewById(R.id.textView1); 
        //找出要參照的物件
        btn = (Button) findViewById(R.id.button1); 
        //登錄監聽物件, this表示活動物件本身
        btn.setOnClickListener(this); 
        //將活動物件登錄為按鈕的長按監聽器 
        btn.setOnLongClickListener(this); 
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

沒有留言:

張貼留言