2012-03-06 16 views
3

私はAndroidデベロッパーが初めてです。私がクリックを処理してきた方法は、ボタンのマニフェストファイルに属性を設定することでした。私が思っているのは、一般的に長いクリックを処理する最善の方法です。 onLongClick()の実装について読んだことがありますが、Viewを拡張するのではなく、上記のようなハンドラを使用する方法がありますか?むしろ、拡張されたViewクラスを使用してプロジェクト全体を再構築する必要がないので、非常に役立ちます。私は明確にすべきAndroidで長いクリックを処理する方法

EDIT

。私はListViewを持っています。リスト内の要素を長くクリックするとどうなるかを設定したいと思います。リストの各要素はTextViewです。答えの1あたりとして、私は以下のコードを追加した、と今私は近い力を得る:

public class TwitterActivity extends ListActivity { 
    List<String> tweets = new LinkedList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setListAdapter(new ArrayAdapter<String>(this, R.layout.layout, tweets)); 

      TextView view = (TextView) findViewById(R.id.ListTemplate); 
      view.setOnLongClickListener(new OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        Toast toast = new Toast(TwitterActivity.this); 
        toast.setText("LongClick"); 
        toast.show(); 

        return true; 
       } 
      }); 

    //... 
    } 
} 
+0

ListActivityに使用されている更新された回答を確認してください –

答えて

6

だからあなたはこのような何かをする必要があり、通常の活動のために

public class TwitterActivity extends ListActivity { 
    List<String> tweets = new LinkedList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setListAdapter(new ArrayAdapter<String>(this, R.layout.layout, tweets)); 
      ListView lv = getListView(); 
      lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ 
        @Override 
        public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) 
        { 
         Toast.makeText(TwitterActivity.this, "LongClick", Toast.LENGTH_LONG).show(); 
        } 
      }); 

    } 
} 

をお

public class MyActivity extends Activity implements View.onLongClickListener { 

    View myView = null; 


    public void onCreate(Bundle state) { 
     super.onCreate(state); 
     setContentView(R.layout.my_activity); 
     myView = findViewById(r.id.my_view); 
     myView.setOnLongClickListener(this); 
    } 

    @Override 
    public void onLongClick(View v) { 
    //long clicked 
    } 

} 
2

はその後setOnLongClickListenerを呼び出し、findViewByIDを使用して、ボタンのハンドルを取得します。

Button b = (Button)findViewByID (R.id.button1); 
b.setOnLongClickListener(new OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     //to do 
    } 
}); 
+0

これを試しましたが、うまくいかなかった。私はListViewを使用していて、リストの各要素をTextViewとして持っています。私のコードは上記の編集にあります。 – ewok

+0

R.layout.layoutを使用していますが、正しく表示されません。使用しているTextViewのIDを指定する必要があります(R.idにある必要があります) – jsimpson

+0

'R.id.ListTemplate'に変更しても強制終了されます – ewok

0

XML属性を持つ唯一のイベントハンドラはです。他のすべてのイベントハンドラは、実行時にJavaコードから登録されます。技術的には、でも実行時にJavaコードから登録されますが、問題のJavaコードを書く必要はありません。あなたがリストの要素に長いクリックに応答する場合は、この行うListActivityため

View.OnLongClickListenerhandler = View.OnLongClickListener() { 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.myButton: // doStuff 
       break; 
      case R.id.myOtherButton: // doStuff 
       break; 
     } 
    } 
} 

findViewById(R.id.myButton).setOnLongClickListener(handler); 
findViewById(R.id.myOtherButton).setOnLongClickListener(handler); 
1

これはかなり簡単です:

ImageButton i = (ImageButton) findViewById(R.id.myButton); 
i.setOnLongClickListener(new myLongListener()); 

private class myLongListener implements View.OnLongClickListener { 
    @Override 
    public void onClick(View v) { 
     //your code here 
    } 
} 

これが役に立ちますようお願いいたします。

1

ほとんどの場合、Viewクラスを拡張する必要はありません。 ViewにはsetOnLongClickListenerというメソッドがあり、ButtonTextViewなどのすべての派生クラスとして直接使用できます。

関連する問題