2014-12-25 3 views
1

enter image description hereAndroid - по пункту щелчка ListView не отвечает

То, что я пытаюсь сделать, когда я нажимаю на любом элементе списка, который изменит цвет текста и вытяжку это мой метод GetView

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
     LayoutInflater mInflater = (LayoutInflater) 
       mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

     convertView = mInflater.inflate(R.layout.nav_drawer_item, null); 
     convertView.setFocusable(false); 

     final TextView mItemTitle = (TextView) convertView.findViewById(R.id.item_title_tv); 
     mItemTitle.setText(mNavDrawerItems.get(position).getmItemTitle()); 

     final ImageView mTitleIcon = (ImageView) convertView.findViewById(R.id.item_icon_iv); 
     mTitleIcon.setImageDrawable(
       mContext.getResources().getDrawable(mNavDrawerItems.get(position).getmItemIcon())); 

     if (position == 0) 
     { 
      convertView = mInflater.inflate(R.layout.nav_drawer_header, null); 
     } 
     else if (position == 1) 
     { 
      /* 
      convertView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) 
       { 
        setColorAndDrawble(mItemTitle, mTitleIcon, 
          mContext.getResources().getColor(R.color.last_news_click_color), 
          mContext.getResources().getDrawable(R.drawable.ic_class_news_click)); 
       } 
      }); 
      */ 
     } 
     else if (position == 2) 
     { 

      convertView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) 
       { 
        setColorAndDrawble(mItemTitle, mTitleIcon, 
          mContext.getResources().getColor(R.color.public_chat_click_color), 
          mContext.getResources().getDrawable(R.drawable.ic_public_chat_click)); 
       } 
      }); 
     } 
     else if (position == 3) 
     { 
      convertView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) 
       { 
        setColorAndDrawble(mItemTitle, mTitleIcon, 
          mContext.getResources().getColor(R.color.messages_click_color), 
          mContext.getResources().getDrawable(R.drawable.ic_messages_click)); 
       } 
      }); 
     } 
     else if (position == 4) 
     { 
      convertView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) 
       { 
        setColorAndDrawble(mItemTitle, mTitleIcon, 
          mContext.getResources().getColor(R.color.results_click_color), 
          mContext.getResources().getDrawable(R.drawable.ic_results_click)); 
       } 
      }); 
     } 

     return convertView; 
} 

private void setColorAndDrawble(TextView textView, ImageView imageView, int color, Drawable drawble) 
{ 
    imageView.setImageDrawable(drawble); 
    textView.setTextColor(color); 
} 

проблема в настоящее время слушатель списка не работает. Зачем?

mDrawerList.setOnItemClickListener(new SlideMenuClickListener());  

private class SlideMenuClickListener implements 
      ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
           long id) { 

      Log.e("SlideMenuClickListener", position + ""); 
      TextView textView = (TextView) view.findViewById(R.id.item_title_tv); 
      textView.setTextColor(getResources().getColor(R.color.last_news_click_color)); 
      Log.e("textView", textView.getText() + ""); 
      // display view for selected nav drawer item 
      displayView(position); 
     } 
    } 

ответ

0

Ваш подход можно рассматривать как неправильно, Вы должны вместо этого создать класс и пользовательский адаптер для каждого пункта списка следует, и вы не должны использовать setOnClickListener для каждого элемента.

Также рекомендуется использовать ViewHolder.

Для получения дополнительной информации также ознакомьтесь с ссылкой или официальной документацией this.

0

Когда вы устанавливаете прослушиватель кликов для строки, это блокирует обработку обычных кликов для ListView. Вы можете исправить это, перемещая всю логику для обновления строки в свой метод onItemClick. (У вас уже есть логика изменить цвет текста дублируется там.)

private class SlideMenuClickListener implements 
     ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(ListView parent, View view, int position, long id) { 

     Log.e("SlideMenuClickListener", position + ""); 
     TextView textView = (TextView) view.findViewById(R.id.item_title_tv); 

     if (position > 0) { 
      textView.setTextColor(getTextColor(position), 
       textView.getTextColors().getDefaultColor()); 
      final ImageView titleIcon = (ImageView) view.findViewById(R.id.item_icon_iv); 
      titleIcon.setImageDrawable(getImage(position)); 
      parent.getAdapter().getView(i, view, list); 
     } 
     Log.e("textView", textView.getText() + ""); 
     // display view for selected nav drawer item 
     displayView(position); 
    } 

    private int getTextColor(int position, int defaultColor) { 
     final Resources res = getContext().getResources(); 
     int color = defaultColor; 
     switch (position) { 
      case 2: color = res.getColor(R.color.public_chat_click_color); break; 
      case 3: color = res.getColor(R.color.messages_click_color); break; 
      case 4: color = res.getColor(R.color.results_click_color);  break; 
     } 
     return color; 
    } 

    private Drawable getImage(int position) { 
     int resId = mNavDrawerItems.get(position).getmItemIcon()); // default 
     switch (position) { 
      case 2: resId = R.drawable.ic_public_chat_click; break; 
      case 3: resId = R.drawable.ic_messages_click; break; 
      case 4: resId = R.drawable.ic_results_click;  break; 
     } 
     return getContext().getDrawable(resId); 
    } 
} 

Вы можете улучшить общую производительность этого подхода, используя шаблон держателя вида (в соответствии с рекомендациями this tutorial). Это включает в себя установку тега для каждой строки на маленький объект, который имеет ссылки на представления текста и изображения для этой строки.

+0

неправильно в getDrawable ????? – user3871129

+1

@ user3871129 - Не знаю. Я пытался подражать вашему коду, но, возможно, я ошибся. Вы должны уметь исправить логику. Важной идеей является подход: внесите изменения в 'onItemClick'. –

+0

по-прежнему та же проблема цвет текста и значок не изменился – user3871129

0

Я решил эту проблему путем добавления setOnTouchListener к convertView в моем классе adpater :) и это отлично работает прямо сейчас

+0

Не могли бы вы опубликовать код, который, наконец, сработал для вас? –

Смежные вопросы