2016-11-18 2 views
1

У меня есть listView, который работает/отображает некоторые данные в виде заголовка и субтитров, все работает нормально, но всякий раз, когда я просматриваю список или конвертирует convertView, субтитры последнего элемента получить повторяется, пока название не, что вопрос ..Подэлемент элемента ListView повторяется после определенной позиции

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


    final ViewHolder viewHolder; 
    m_oActivatedProfilePreferences =m_oContext.getSharedPreferences(m_kSHARED_PREF_PROFILE_KEY, Context.MODE_PRIVATE); 
    final CProfileDataSource profileDataSource = new CProfileDataSource(m_oContext); 
    final List<CUserProfile> profileName = profileDataSource.getAllProfiles(); 

    if(convertView==null) 
    { 
     viewHolder=new ViewHolder(); 
     convertView=layoutInflater.inflate(R.layout.profile_description,parent,false); 
     viewHolder.m_profileName=(TextView) convertView.findViewById(R.id.profilename); 
     viewHolder.m_radioButton=(RadioButton)convertView.findViewById(R.id.radioButton); 
     viewHolder.m_profileDetails=(TextView)convertView.findViewById(R.id.pro_details); 
     viewHolder.m_profileLyt=(LinearLayout)convertView.findViewById(R.id.profile); 
     if(position==0) 
     { 
      viewHolder.m_profileDetails.setText(R.string.general_profile_description); 
     }else if(position==1) 
     { 
      viewHolder.m_profileDetails.setText(R.string.sleep_profile_description); 
     }else if(position==2) 
     { 
      viewHolder.m_profileDetails.setText(R.string.ssaver_profile_description); 
     }else 
     { 
      //here for the 8th position of list it displays the text as position 0 

      viewHolder.m_profileDetails.setText(R.string.profile_desc); 
     } 
     convertView.setTag(viewHolder); 
     viewHolder.m_radioButton.setChecked(false); 
    } 
    else 
    { 
     viewHolder = (ViewHolder) convertView.getTag(); 
     viewHolder.m_radioButton.setChecked(false); 
    } 
    return convertView; 
} 

под «еще» часть «в viewHolder.m_profileDetails» установить их текст в позиции с номером 0, в то время как это положение 8 или 9 в списке ,

private static class ViewHolder{ 
    RadioButton m_radioButton; 
    TextView m_profileName; 
    TextView m_profileDetails; 
    LinearLayout m_profileLyt; 
} 

ответ

1

попробовать этот метод GetView: -

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


    final ViewHolder viewHolder; 
    m_oActivatedProfilePreferences =m_oContext.getSharedPreferences(m_kSHARED_PREF_PROFILE_KEY, Context.MODE_PRIVATE); 
    final CProfileDataSource profileDataSource = new CProfileDataSource(m_oContext); 
    final List<CUserProfile> profileName = profileDataSource.getAllProfiles(); 

    if(convertView==null) 
    { 
     //always define viewholder object here and also link your xml components like textview using findViewById() method. 

     viewHolder=new ViewHolder(); 
     convertView=layoutInflater.inflate(R.layout.profile_description,parent,false); 
     viewHolder.m_profileName=(TextView) convertView.findViewById(R.id.profilename); 
     viewHolder.m_radioButton=(RadioButton)convertView.findViewById(R.id.radioButton); 
     viewHolder.m_profileDetails=(TextView)convertView.findViewById(R.id.pro_details); 
     viewHolder.m_profileLyt=(LinearLayout)convertView.findViewById(R.id.profile); 

     convertView.setTag(viewHolder); 
     viewHolder.m_radioButton.setChecked(false); 
    } 
    else 
    { 
     // This tag viewHolder object helps you to reuse your object. 
     viewHolder = (ViewHolder) convertView.getTag(); 
     viewHolder.m_radioButton.setChecked(false); 
    } 
    // Always do setText(),onClick like operation on components here so here viewHolder decide which UI components need to use. 

    if(position==0) 
     { 
      viewHolder.m_profileDetails.setText(R.string.general_profile_description); 
     }else if(position==1) 
     { 
      viewHolder.m_profileDetails.setText(R.string.sleep_profile_description); 
     }else if(position==2) 
     { 
      viewHolder.m_profileDetails.setText(R.string.ssaver_profile_description); 
     }else 
     { 
      //here for the 8th position of list it displays the text as position 0 

      viewHolder.m_profileDetails.setText(R.string.profile_desc); 
     } 
    return convertView; 
} 

Позвольте мне знать, если получать какие-либо ошибки в нем

+0

спасибо Анил ... он работает. – sam

+0

отлично, ваш код прав, но у вас неправильное расположение кода, поэтому ваш просмотр повторно использует только первые четыре созданных элемента. –

+0

. Проверить метод getView(). Теперь я добавил комментарии, которые помогут вам понять фактическую работу списков и использование viewHolder класс. –

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