Android 为列表视图创建监听器 onLongClick
Android create Listener onLongClick for listview
在我的应用程序中,我有一个 activity 带有一些片段。其中一个片段我有列表视图,我想创建监听器来监听来自 activity 的 Listview 项目上的 onLongClick,例如,如果最终用户长按 listview 项目进入片段 i 必须在 activity
中显示 Toast
为此,我创建了接口侦听器,例如:
public interface IOnLongClickReceiveSmsMaster {
public void onLogin(Integer position);
}
在 Activity 我将 BroadcastReceiver
创建为 :
方法:
IntentFilter filter = new IntentFilter(M.ACTION_BROADCAST_LONGCLICK_LISTVIEW);
registerReceiver(NotifyLongClickOnItems, filter);
广播函数:
private final BroadcastReceiver NotifyLongClickOnItems = new BroadcastReceiver() {
@Override
public void onReceive(Context ctxt, Intent i) {
Toast.makeText(MainView.this, "LongClick", Toast.LENGTH_SHORT).show();
}
现在进入 Fragment i 必须将定义的接口设置为 LongClick
:
private static IOnLongClickReceiveSmsMaster mOnLongClickReceiveSmsMaster;
public View onCreateView( ... ){
listview= (ListView) view.findViewById(R.id.listView);
listview.setOnLongListener(new IOnLongClickReceiveSmsMaster() {
@Override
public void onLogin(Integer position) {
}
});
};
.
.
.
}
public static void setOnLongListener(IOnLongClickReceiveSmsMaster l) {
mOnLongClickReceiveSmsMaster = l;
}
不幸的是我的代码不正确,我得到这个错误:
The method setOnLongListener(new IOnLongClickReceiveSmsMaster(){}) is undefined for the type ListView
我认为我对具有此能力的分析不正确,请帮助我解决
如果直接使用AdapterView.OnItemLongClickListener
,会容易很多。是这样的:
getListView().setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick( AdapterView<?> arg0, View v, int position, long id){
/* Do whatever you want here, e.g. go to next Activity etc. */
return false;
}
};
要通知您的 Activity
,请在您的 Fragment
class
中创建一个界面
public interface LongClickNotifier{
public void notifyOnLongClick(int position, View v);
}
并让你的Activity
实现这个接口
public class MainActivity extends Activity implements LongClickNotifier{
...
...
@Override
public void notifyOnLongClick(int position, View v){
/* Do whatever you want here with "position" and "v". */
}
}
现在在您的 Fragment
,
getListView().setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick( AdapterView<?> arg0, View v, int position, long id){
((LongClickNotifier)getActivity()).notifyOnLongClick(position, v);
return false;
}
};
好了!无需创建 BroadcastReceiver
或其他任何内容!
首先你只需要列表视图对象。
ListView listView = (ListView)findViewById(R.id.yout_list_view_layout_id_here);
之后,只需定义一个监听器到列表视图即可。
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
Log.v("List view long clicked ","position : " + pos);
return true;
}
});
在我的应用程序中,我有一个 activity 带有一些片段。其中一个片段我有列表视图,我想创建监听器来监听来自 activity 的 Listview 项目上的 onLongClick,例如,如果最终用户长按 listview 项目进入片段 i 必须在 activity
中显示 Toast为此,我创建了接口侦听器,例如:
public interface IOnLongClickReceiveSmsMaster {
public void onLogin(Integer position);
}
在 Activity 我将 BroadcastReceiver
创建为 :
方法:
IntentFilter filter = new IntentFilter(M.ACTION_BROADCAST_LONGCLICK_LISTVIEW);
registerReceiver(NotifyLongClickOnItems, filter);
广播函数:
private final BroadcastReceiver NotifyLongClickOnItems = new BroadcastReceiver() {
@Override
public void onReceive(Context ctxt, Intent i) {
Toast.makeText(MainView.this, "LongClick", Toast.LENGTH_SHORT).show();
}
现在进入 Fragment i 必须将定义的接口设置为 LongClick
:
private static IOnLongClickReceiveSmsMaster mOnLongClickReceiveSmsMaster;
public View onCreateView( ... ){
listview= (ListView) view.findViewById(R.id.listView);
listview.setOnLongListener(new IOnLongClickReceiveSmsMaster() {
@Override
public void onLogin(Integer position) {
}
});
};
.
.
.
}
public static void setOnLongListener(IOnLongClickReceiveSmsMaster l) {
mOnLongClickReceiveSmsMaster = l;
}
不幸的是我的代码不正确,我得到这个错误:
The method setOnLongListener(new IOnLongClickReceiveSmsMaster(){}) is undefined for the type ListView
我认为我对具有此能力的分析不正确,请帮助我解决
如果直接使用AdapterView.OnItemLongClickListener
,会容易很多。是这样的:
getListView().setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick( AdapterView<?> arg0, View v, int position, long id){
/* Do whatever you want here, e.g. go to next Activity etc. */
return false;
}
};
要通知您的 Activity
,请在您的 Fragment
class
public interface LongClickNotifier{
public void notifyOnLongClick(int position, View v);
}
并让你的Activity
实现这个接口
public class MainActivity extends Activity implements LongClickNotifier{
...
...
@Override
public void notifyOnLongClick(int position, View v){
/* Do whatever you want here with "position" and "v". */
}
}
现在在您的 Fragment
,
getListView().setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick( AdapterView<?> arg0, View v, int position, long id){
((LongClickNotifier)getActivity()).notifyOnLongClick(position, v);
return false;
}
};
好了!无需创建 BroadcastReceiver
或其他任何内容!
首先你只需要列表视图对象。
ListView listView = (ListView)findViewById(R.id.yout_list_view_layout_id_here);
之后,只需定义一个监听器到列表视图即可。
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
Log.v("List view long clicked ","position : " + pos);
return true;
}
});