我是Android dev的新手。我处理点击的方式是在清单文件中为按钮设置android:onClick
属性。我想知道的是一般处理长点击的最佳方法。我已经阅读了有关实现onLongClick()
的内容,但有没有办法使用处理程序(如上所述),而不是必须扩展View?这将非常有用,因为我不想用扩展的View类重建我的整个项目。
修改
我应该澄清一下。我有ListView
,我想设置当我长按列表中的元素时会发生什么。列表中的每个元素都是TextView
。根据其中一个答案,我添加了以下代码,现在我得到一个力量关闭:
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 :(得分:6)
对于ListActivity,如果要响应列表元素的长按,请执行以下操作:
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
}
}
答案 1 :(得分:2)
使用findViewByID获取按钮的句柄,然后调用setOnLongClickListener。
Button b = (Button)findViewByID (R.id.button1);
b.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//to do
}
});
答案 2 :(得分: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
}
}
希望这有帮助!
答案 3 :(得分:1)
在大多数情况下,您不必扩展View
类。 View
有一个名为setOnLongClickListener
的方法,您可以将其直接用作所有派生类,例如Button
或TextView
等。
答案 4 :(得分:0)
唯一具有XML属性的事件处理程序是android:onClick
。所有其他事件处理程序都在运行时从Java代码注册。从技术上讲,即使android:onClick
在运行时从Java代码注册,但您不必编写有问题的Java代码。
所以你需要做这样的事情:
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);