2015-06-19 3 views
1

У меня есть ListView и я заселена, что ListView с TextView и Button с помощью пользовательского adapter.I было генерироваться событие щелчка для этого Button в обычае adapter.In этого события нажатия я пытаюсь изменить текст и цвет кнопки, до здесь его работает нормально, но когда я прокручивать ListView вверх и вниз цвета текста другого Button changing.I было останавливаться из последних нескольких дней ...Элемент списка кнопок со списком в режиме просмотра списка в виде списка прокрутки сверху вниз?

Вот код, который я пытался до сих пор

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     View v=convertView; 
     final ViewHolder holder; 
     if(convertView ==null) 
     { 
      convertView = mInlfater.inflate(R.layout.attendancelistview,null); 
      holder = new ViewHolder(); 
      holder.b1 = (Button)convertView.findViewById(R.id.row3); 
      holder.tv1 = (TextView)convertView.findViewById(R.id.row1); 
      holder.tv2 = (TextView)convertView.findViewById(R.id.row2); 
      convertView.setTag(holder); 
     } 
     else 
     { 
      holder =(ViewHolder) convertView.getTag(); 
     } 
     //List<StudentData> data = list.get(position).Rno; 
     holder.tv1.setText(String.valueOf(list.get(position).Rno)); 
     holder.tv2.setText(list.get(position).StudentName); 
     holder.b1.setText(list.get(position).Attendance); 
     holder.b1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) 
      { 
       if(holder.b1.getText().equals("Present")) 
       { 
        holder.b1.setText("Absent"); 
        //list.get(position).put("Attendance", "Absent"); 

        holder.b1.setTextColor(Color.RED); 
       } 
       else if(holder.b1.getText().equals("Absent")) 
       { 
        holder.b1.setText("Present"); 
        //list.get(position).put("Attendance", "Present"); 
        holder.b1.setTextColor(Color.GREEN); 
       } 
       String rno1= String.valueOf(holder.tv1.getText()); 
       name=String.valueOf(holder.tv2.getText()); 
      } 

     }); 
     return convertView; 
    } 
    static class ViewHolder 
    { 
     Button b1; 
     TextView tv1,tv2,tv3; 
    } 
+0

Является ли ваш держатель.b1 изменен? – Amsheer

+0

Да, его изменение меняется, но когда я прокручиваю его снова, меняя прежний текст, но цвет остается таким же. – UnknownCoder

+0

Я нашел вашу проблему .Проверьте мой ответ. Если вы не понимаете, добавьте комментарии. Я объясню – Amsheer

ответ

1

Если текст кнопки holder.b1 меняется, причина в том, что вы неправильно обрабатываете свой getView.

Я предполагаю, что это возвращает некоторый целочисленный идентификатор

list.get(position).Rno 

Так что вам нужно сохранить этот идентификатор в некоторых ArrayList, например

//Declare this outside of getView(). 
ArrayList<Integer> your_number = new ArrayList(); 

И в кнопке мыши

holder.b1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) 
      { 
       if(holder.b1.getText().equals("Present")) 
       { 
        holder.b1.setText("Absent"); 
        //list.get(position).put("Attendance", "Absent"); 

        holder.b1.setTextColor(Color.RED); 
your_number.add(list.get(position).Rno); 
       } 
       else if(holder.b1.getText().equals("Absent")) 
       { 
        holder.b1.setText("Present"); 
        //list.get(position).put("Attendance", "Present"); 
        holder.b1.setTextColor(Color.GREEN); 
your_number.remove(list.get(position).Rno); 
       } 
       String rno1= String.valueOf(holder.tv1.getText()); 
       name=String.valueOf(holder.tv2.getText()); 
      } 

     }); 

И наконец, в вашем getView()

if (your_number.contains(list.get(position).Rno)){ 
//set your text 
}else{ 
//Set your text 
} 
+0

В событии on click мы должны снова позвонить get View() вправо, чтобы произвести изменения. – UnknownCoder

+0

Не нужно сновазывать getView. Он будет автоматически вызывать – Amsheer

+0

Но когда я дважды нажимаю кнопку, приложение останавливалось – UnknownCoder

0

Вам нужно отслеживать кнопки, которые вы используете e щелкнул и установил соответствующие цвета.

Помните, что ваше представление повторно используется, поэтому, если у вас есть красная кнопка при повторном использовании вашего вида (путем прокрутки вверх/вниз), он по-прежнему будет красным.

Используйте список или какой-либо контейнер для хранения щелкнутых элементов, а в getView задайте правильные значения.

0

Поскольку одни и те же представления используются несколько раз, если вы меняете цвет для одного элемента, он будет применен к другому элементу с той же ссылкой. Чтобы избежать этого, когда вы нажимаете на кнопку, получите позицию элемента и метод getView(), основанный на изменении позиции, цвет текста.

EDIT

Добавьте эти строки в getView() метод до holder.b1.setOnClickListener() линии

if(holder.b1.getText().equals("Present")) 
{ 
     holder.b1.setTextColor(Color.GREEN); 
} 
else if(holder.b1.getText().equals("Absent")) 
{ 
     holder.b1.setTextColor(Color.RED); 
} 

Я не выполнил ваш код ... но он может также работает и удалить комментарий по линии list.get(position).put("Attendance", "Absent"); и list.get(position).put("Attendance", "Present"); в onClick() способ.

+0

Есть ли какой-либо ссылочный пример – UnknownCoder

+0

Проверьте мой обновленный ответ !!!! – Chandrakanth

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