2014-12-06 71 views
0

我正在开发一个应用程序,如谷歌播放音乐! 事情就像那个应用程序,我在我的GridView上的每一行都有一个popupmenu。 我从片段实现onClickListener设置网格视图适配器。 的问题是: 如何设置onclicklistener每个弹出菜单和处理来自片段 onclick事件我的弹出菜单包含两个项目: DELETE 添加到播放列表我怎样才能setOnClickListener在适配器和从片段访问?

我想从片段访问的onClick的原因是我想删除具有notifydatasetchanged()的特定文件和更新网格视图!

我怎么能做到这一点或任何建议对如何从适配器n更新网格视图删除特定文件!

谢谢!

这是我的GridView适配器:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ViewHolder holder; 
    item = songs.get(position); 

    if (row == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(com.irangrammy.irangrammy.R.layout.mchannel_row, parent, false); 
     holder = new ViewHolder(); 
     holder.thumbnail = (ImageView) row.findViewById(com.irangrammy.irangrammy.R.id.image); 
     holder.title = (TextView) row.findViewById(com.irangrammy.irangrammy.R.id.singer); 
     holder.mMenu = (ImageView) row.findViewById(R.id.itemOption); 

     holder.mMenu.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       PopupMenu popUp = new PopupMenu(context, v); 
       MenuInflater inflater = popUp.getMenuInflater(); 
       inflater.inflate(R.menu.mchannel_popup, popUp.getMenu()); 
       popUp.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

        @Override 
        public boolean onMenuItemClick(MenuItem arg0) { 
         // TODO Auto-generated method stub 
         if(arg0.getItemId()==R.id.delete) 
         { 

         } 
        return true; 
        } 
       }); 
       popUp.show();  
      } 
     }); 
     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 
+1

使用的界面或通过您的片段适配器 – 2014-12-06 09:58:20

+0

类@shayanpourvatan我通过片段到我的适配器类,但它不工作!你可以给我举例如何将片段传递给适配器n在适配器类中检索它? – 2014-12-06 10:05:40

+1

通过您的片段适配器类,而不是创建新的OnClickListener投你的片段onClickListener,我不知道有关,但你可以尝试 – 2014-12-06 10:17:06

回答

2

你可以通过你的片段适配器类和投你的片段onClickListener,但要确保你有实现onClickListener的片段类。

1

我没有得到你!但如果我理解你的解决方案: 试着想把广播发送到你的片段,当片段得到广播时,按你的意愿处理它。 UPDATE:如果你想监听器设置为视图,你可以做到这一点:

convertView.setOnClickListener(new View.ClickListener() { 
        @Override 
        public boolean onLongClick(View view) { 

        // Do what you want when the view clicked! 
        } 
       }); 

如果这不是问题的答案 - 给我发邮件并附上您的母语

+0

谢谢,问题是:我如何设置时钟监听器从适配器类n的视图监听onClick方法在扩展onClickListener的片段! – 2014-12-06 10:09:29

+0

不好意思误解你。 – 2014-12-06 10:29:44

+0

不是问题,谢谢你,我通过传递片段来解决它 – 2014-12-06 11:08:51

1

首先您查看支架的设计模式是错了,它一定是象下面这样:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ViewHolder holder; 
    item = songs.get(position); 

    if (row == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(com.irangrammy.irangrammy.R.layout.mchannel_row, parent, false); 
     holder = new ViewHolder(); 
     holder.thumbnail = (ImageView) row.findViewById(com.irangrammy.irangrammy.R.id.image); 
     holder.title = (TextView) row.findViewById(com.irangrammy.irangrammy.R.id.singer); 
     holder.mMenu = (ImageView) row.findViewById(R.id.itemOption); 


     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 

     holder.mMenu.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       PopupMenu popUp = new PopupMenu(context, v); 
       MenuInflater inflater = popUp.getMenuInflater(); 
       inflater.inflate(R.menu.mchannel_popup, popUp.getMenu()); 
       popUp.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

        @Override 
        public boolean onMenuItemClick(MenuItem arg0) { 
         // TODO Auto-generated method stub 
         if(arg0.getItemId()==R.id.delete) 
         { 
          songs.get(position).remove(); 
          notifyDataSetChanged(); 

         } 
        return true; 
        } 
       }); 
       popUp.show();  
      } 
     }); 
}