2012-06-28 5 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> 

자바 코드 활동 ... 첨부 된

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); 
이 코드에서3210

자바 코드 ... 어댑터

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); 
} 

당신은 어떤 다른 절 있어요. 즉, position이 0,1,2,4,5 또는 6이면 뷰의 가시성을 명시 적으로 설정하지 않으므로 뷰를 재활용했을 때 설정된 가시성이됩니다. convertView이 null이 아닌 경우, 먼저 표시 여부를 수정할 수있는 항목의 표시 여부를 재설정해야합니다.

+0

글쎄, 완벽하게 작동했습니다. 귀중한 시간을 가져 주셔서 감사합니다. –

관련 문제