2012-06-28 2 views
2

Я использую вид списка и адаптер для загрузки списка, каждый элемент списка имеет TextView, EditText и Image .. Я устанавливаю видимость стрелки и редактирует текст в соответствии с к позиции строки списка, все работает отлично, когда я загружаю список в первый раз ... Но когда я просматриваю список, видимость предметов меняется. Пожалуйста, помогите мне в этом вопросе ... соответствующие коды были прикреплены ... код деятельностиВидимость элементов изменяется при прокрутке ListView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:orientation="horizontal" android:background="#FFFFFF"> 
    <TextView android:layout_height="wrap_content" android:layout_width="0dip" 
      android:textSize="20dip" android:layout_weight="1" 
      android:id="@+id/textview_add_lot_list" android:textColor="@android:color/black" 
      android:paddingTop="10dip" android:paddingBottom="10dip" 
      android:paddingLeft="10dip"/> 
    <EditText android:layout_height="fill_parent" android:layout_width="0dip" 
      android:layout_weight="1" android:id="@+id/et_add_lot_list" 
      android:layout_gravity="center_vertical"/> 
    <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" 
      android:id="@+id/imageview_arrow_add_lot_list" android:layout_gravity="center_vertical" 
      android:visibility="invisible" android:src="@drawable/more_reviews_arrow" 
      android:paddingRight="10dip"/> 
</LinearLayout> 

Java ...

final ArrayList<String> listItems  = new ArrayList<String>(); 
     listItems.add("Parking name"); 
     listItems.add("Address"); 
     listItems.add("City"); 
     listItems.add("State"); 
     listItems.add("Zip"); 
     listItems.add("Phone"); 
     listItems.add("Web Address"); 
     listItems.add(" "); 
     listItems.add("Parking Image"); 
     listItems.add(" "); 
     listItems.add("Open Hours"); 
     listItems.add(" "); 
     listItems.add("Web Reviews"); 

     final AddParkingLotAdapter adapter = new AddParkingLotAdapter(mAppContext,0,listItems); 
     lv.setAdapter(adapter); 

Java код ... Адаптер

public class AddParkingLotAdapter extends ArrayAdapter<String> { 
    private ArrayList<String> mStrings; 
    private LayoutInflater mInflater; 
    private AppContext mContext; 

    private static int NON_EMPTY_ROW = 1;                           
    private static int EMPTY_ROW  = 0; 

    public AddParkingLotAdapter(Context context, int resId, List<String> strings) { 
     super(context, resId,strings); 
     mStrings  = (ArrayList<String>) strings; 
     mContext  = (AppContext) context; 
     mInflater  = LayoutInflater.from(context); 
    } 
    @Override 
    public int getViewTypeCount() { 
     return 2;        
    } 
    @Override 
    public int getCount() { 
     return mStrings.size();  
    } 
    @Override 
    public String getItem(int position) { 
     return mStrings.get(position); 
    } 
    @Override 
    public int getItemViewType(int position) { 
     if(position==7||position==9||position==11){ 
      return EMPTY_ROW; 
     }else{ 
      return NON_EMPTY_ROW; 
     } 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     TextView itemTextView = null; 

     //different inflations for different type rows.. 
     if(getItemViewType(position) == EMPTY_ROW){ 
      if (convertView == null) { 
       convertView   = mInflater.inflate(R.layout.review_empty_row, null); 
      } 
     }else if(getItemViewType(position) == NON_EMPTY_ROW){ 
      if (convertView == null) { 
       convertView  = mInflater.inflate(R.layout.add_parkinglist_item, null); 
      } 
      itemTextView  = (TextView) convertView.findViewById(R.id.textview_add_lot_list); 
      itemTextView.setText(mStrings.get(position)); 
      if (position==3||position==8||position==10||position==12){ 
       ImageView itemImageView  = (ImageView)convertView.findViewById(R.id.imageview_arrow_add_lot_list); 
       itemImageView.setVisibility(View.VISIBLE); 
       EditText editText    = (EditText)convertView.findViewById(R.id.et_add_lot_list); 
       editText.setVisibility(View.INVISIBLE); 
      } 
     } 
     return convertView; 
    } 
} 

ответ

5

В этом коде:

if (position==3||position==8||position==10||position==12){ 
    ImageView itemImageView  = (ImageView)convertView.findViewById(R.id.imageview_arrow_add_lot_list); 
    itemImageView.setVisibility(View.VISIBLE); 
    EditText editText    = (EditText)convertView.findViewById(R.id.et_add_lot_list); 
    editText.setVisibility(View.INVISIBLE); 
} 

у вас нет еще пункта. Это означает, что если позиция равна 0,1,2,4,5 или 6, вы явно не устанавливаете видимость представлений, и поэтому видимость будет такой, какой она была установлена, когда виды были переработаны. Если convertView не имеет значения null, вам всегда нужно сбросить видимость любых элементов, видимость которых может быть изменена ранее.

+0

Ну, это сработало отлично, спасибо за ваше драгоценное время. –

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