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;
        }
    });