Почему item.getMenuInfo () имеет значение null? - PullRequest
1 голос
/ 31 мая 2011

В моем элементе ListVeiw у меня 4-8 ImageView (некоторые из них невидимы в зависимости от некоторого значения) и 4 TextView.

Когда я долго щелкаю по элементу ListView, элемент (AdapterContextMenuInfo). GetMenuInfo () возвращает мне ноль.

В моем адаптере я определил следующие методы:

public int getCount() {
   return NewList.size();
}

public Object getItem(int position) {
   return position;
}

public long getItemId(int position) {
   return position;
}

public void Remove(int id){
    notifyDataSetChanged();
}


public View getView(int position, View convertView, ViewGroup parent){

   View vi=convertView;
   NewsFeedHolder holder;
   News n= NewList.get(position);
   List<NewsItem> items = n.getNewsItems();
   int ItemsLen = items.size();

   if (convertView == null){

       vi = inflater.inflate(R.layout.newsfeed_item, null);

       holder=new NewsFeedHolder();

       holder.txtTitle        = (TextView)vi.findViewById(R.id.newsfeed_item_name);
       holder.avatar_image    = (ImageView)vi.findViewById(R.id.newsfeed_item_icon);
       holder.txtUpdate       = (TextView)vi.findViewById(R.id.newsfeed_item_update);
       holder.txtLike         = (TextView)vi.findViewById(R.id.newsfeed_item_like); 
       holder.txtDisLike      = (TextView)vi.findViewById(R.id.newsfeed_item_dislike);
       holder.btnLike         = (ImageButton)vi.findViewById(R.id.newsfeed_like_button) ;
       holder.btntxtDisLike   = (ImageButton)vi.findViewById(R.id.newsfeed_dislike_button); 

       holder.imgItemIcon1    = (ImageView)vi.findViewById(R.id.newsfeed_item_icon1);
       holder.imgItemIcon2    = (ImageView)vi.findViewById(R.id.newsfeed_item_icon2);
       holder.imgItemIcon3    = (ImageView)vi.findViewById(R.id.newsfeed_item_icon3);
       holder.btnLike.setOnClickListener(activity.OnLikeClickListener);
       holder.btntxtDisLike.setOnClickListener(activity.OnDisLikeOnClickListener);

        vi.setTag(holder);
    } 
    else {
          holder=(NewsFeedHolder)vi.getTag();
    }

   imageLoader.DisplayImage(n.getUserAvatarUrl(), activity, holder.avatar_image);
   String url1,url2,url3;

    try{

        switch(ItemsLen){


        case 1:
            url1 = n.getNewsItems().get(0).getItemUrl();
            imageLoader.DisplayImage(url1, activity, holder.imgItemIcon1);  
            break;

        case 2:
            url1 = n.getNewsItems().get(1).getItemUrl();
            imageLoader.DisplayImage(url1, activity, holder.imgItemIcon1);  
            url2 = n.getNewsItems().get(1).getItemUrl();
            imageLoader.DisplayImage(url2, activity, holder.imgItemIcon2);
            break;

        case 3:
            url1 = n.getNewsItems().get(2).getItemUrl();
            imageLoader.DisplayImage(url1, activity, holder.imgItemIcon1);  
            url2 = n.getNewsItems().get(2).getItemUrl();
            imageLoader.DisplayImage(url2, activity, holder.imgItemIcon2);
            url3 = n.getNewsItems().get(2).getItemUrl();
            imageLoader.DisplayImage(url3, activity, holder.imgItemIcon3);
            break;

    default:

    }
    }
    catch(Exception e){
        Log.i("adaptex",e.getMessage());
    }


    holder.txtTitle.setText(n.getNewsTitle());
    holder.txtUpdate.setText(n.getUpdate());
    holder.txtLike.setText(Integer.toString(n.getLike()));
    holder.txtDisLike.setText(Integer.toString(n.getDesLike()));

    activity.registerForContextMenu(vi);

    vi.setOnClickListener(activity.OnListItemClickListener);


    return vi;

}

И когда я пытаюсь получить item.getMenuInfo(), я получаю ноль.

Ответы [ 3 ]

3 голосов
/ 16 ноября 2011

Вам необходимо зарегистрировать список для контекстного меню, а не для пунктов.

// wrong:
activity.registerForContextMenu(vi);

// right:
activity.registerForContextMenu(myList);
0 голосов
/ 28 мая 2015

getMenuInfo () будет работать с ListAdapter, а не с представлениями.

Но, Вы можете передать дополнительные данные с тегом представления.

в getView: vi.setTag (положение) activity.registerForContextMenu (VI);

объявить в деятельности private int id;

onCreateContextMenu: id = (int) v.getTag ();

onContextItemSelected: Вы можете использовать идентификатор

0 голосов
/ 31 мая 2011

Возможно, он не имеет к этому никакого отношения, но я сразу вижу одну явную вещь:

public Object getItem(int position) {
   return position;
}

public long getItemId(int position) {
   return position;
}

Ваш метод getItem возвращает int позиции объекта, а не фактическую Object как указано в объявлении метода.

...