2013-12-25 3 views
0

Я показываю несколько строк в своем ListView и хочу изменить только одну из строк, увидев, соответствует ли какая-либо из даты в списке сегодняшней дате.Измените значок одной строки ListView

Мой частичный код:

DateFormat df = new SimpleDateFormat("EEEEE, LLLL d", Locale.US); 
String[] suspendedDates = { 
    "Tuesday, January 1", 
    "Wednesday, April 16", 
    "Monday, October 6", 
    "Wednesday, December 25" 
}; 

lvDisplay = (ListView) findViewById(R.id.lvDisp); 

     for (int i = 0; i < suspendedDates.length; i ++) { 
      sDate = suspendedDates[i]; 
      sReason = datesReason[i]; 
      if (Arrays.asList(suspendedDates).contains(df.format(Calendar.getInstance(Locale.US).getTime()))) { 
       inIconShow = R.drawable.caliconpressed; //if today matches display a different drawable 
       contents.add(new SetRows(inIconShow, sDate, sReason)); 
      } 
      if (!Arrays.asList(suspendedDates).contains(df.format(Calendar.getInstance(Locale.US).getTime()))) { 
       inIconShow = R.drawable.calicon; //if today doesn't match the array display the default drawable 
       contents.add(new SetRows(inIconShow, sDate, sReason)); 
      } 
     } 
     // Now set your adapter. 
     adapter = new SetRowsCustomAdapter(MainActivity.this, R.layout.listdates, contents); 
     lvDisplay.setAdapter(adapter); 

SetRowsCustomAdapter класс:

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class SetRowsCustomAdapter extends ArrayAdapter<SetRows> { 
    Context context; 
    int layoutResourceId; 
    ArrayList<SetRows> data=new ArrayList<SetRows>(); 
    public SetRowsCustomAdapter(Context context, int layoutResourceId, ArrayList<SetRows> data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     ImageHolder holder = null; 

     if(row == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new ImageHolder(); 
      holder.txtTitle = (TextView)row.findViewById(R.id.tvDateVal); 
      //holder.txtTitle.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/robm.ttf")); 
      holder.imgIcon = (ImageView)row.findViewById(R.id.ivIcon0); 
      holder.txtID = (TextView)row.findViewById(R.id.tvReasonVal); 
      //holder.txtID.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/robm.ttf")); 
      row.setTag(holder); 
     } 
     else 
     { 
      holder = (ImageHolder)row.getTag(); 
     } 

     SetRows myImage = data.get(position); 
     holder.txtTitle.setText(myImage.name); 
     holder.txtID.setText(myImage.id); 
     int outImage=myImage.image; 
     holder.imgIcon.setImageResource(outImage); 
     return row; 

    } 

    static class ImageHolder 
    { 
     ImageView imgIcon; 
     TextView txtTitle; 
     TextView txtID; 
    } 
} 

Так четвёртая строка должна иметь другой значок, а другой 3 должны иметь значок по умолчанию. Что происходит, если совпадение даты, каждая строка имеет другой значок, иначе каждая строка имеет значок по умолчанию.

Как исправить это?

+0

почтовый индекс в классе 'SetRowsCustomAdapter' –

+0

Обновите мой вопрос, чтобы отобразить класс адаптера – Si8

+1

, введите код модели (SetRows) и как вы заполняете arraylist , – Raghunandan

ответ

1

, если вы хотите изменить изображение, которое вы можете сделать в getView методе как сильфон код:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     ImageHolder holder = null; 

     if(row == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new ImageHolder(); 
      holder.txtTitle = (TextView)row.findViewById(R.id.tvDateVal); 
      //holder.txtTitle.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/robm.ttf")); 
      holder.imgIcon = (ImageView)row.findViewById(R.id.ivIcon0); 
      holder.txtID = (TextView)row.findViewById(R.id.tvReasonVal); 
      //holder.txtID.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/robm.ttf")); 
      row.setTag(holder); 
     } 
     else 
     { 
      holder = (ImageHolder)row.getTag(); 
     } 

     SetRows myImage = data.get(position); 
     holder.txtTitle.setText(myImage.name); 
     holder.txtID.setText(myImage.id); 
     int outImage=myImage.image; 
     if (data.getValue) 
      holder.imgIcon.setImageResource(deferentIcon); 
     else 
      holder.imgIcon.setImageResource(defaultIcon); 
     return row; 

    } 

и если вы хотите изменить мульти значков строк вы можете отправить один список вашей строки и проверить, что и для обновить список вы используете adapter.notifyDataSetChanged()

Редактировать

для вашей ситуации вы можете добавить на логическое значение в вашей DS, и если дата равна установленному истине, в противном случае задано другое, что и в инструкции if, проверьте, что

+0

Это не должно быть 4-я позиция, я хочу, чтобы она соответствовала только дате. Если сегодняшняя дата соответствует любой дате, указанной в 'suspDates', тогда отобразится другой значок. – Si8

+0

вы можете проверить все, что хотите, просто установите свое условие в выражении if в методе getView –

+0

См. Раздел «Редактирование», добавьте одно логическое значение в данные DS или проверьте дату в методе getView –

0

Используйте viewHolder в адаптере, затем используйте notifyDataSetChanged() в адаптере; Я уже использовал, и это поможет.

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