2015-01-12 4 views
0

하나의 ListView를 사용하고 두 명의 Arraylist가있는 하나의 어댑터를 설정하고 있습니다. List 및 List1은 SqliteDatabase에서 서로 다른 GetAllItems 인 두 개의 ArrayList입니다.안드로이드의 ListView에서 ArrayList가있는 ArrayIndexOutofBoundException?

내 질문은 10 개 항목을 가정하고 목록 7은 7 개 항목을 스크롤 한 다음 7 개 항목까지 성공적으로 표시 할 때마다 8 개 항목까지 표시 한 다음 오류 ArrayOutOfBoundExcecption을 지정합니다. 왜냐하면 두 ArrayList의 크기가 다르기 때문입니다. List는 항상 더 크고 List1입니다.

해결 방법이 오류 메시지가 표시됩니다.

Plesae 가이드 나를.

My code is, 

    Adapter1 adapter = new Adapter1(this, 
          List, List1); 
    listView1.setAdapter(Adapter1); 

     dbAdapter.openForRead(); 
      list = dbAdapter.getAllMyData(); 
      dbAdapter.close(); 

      dbAdapter.openForRead(); 

      list1 = dbAdapter.getDisplayLike(); 
      dbAdapter.close(); 


/** Adapter Class */ 
    public class Adapter1 extends BaseAdapter { 

     Context context = null; 
     LayoutInflater layoutInflater = null; 

     List<List> list = new ArrayList<List>(); 
     List<List1> list1 = new ArrayList<List1>(); 

     public Adapter1(Context context, List<List> list , 
       List<List1> list1) { 

      this.context = context; 
      this.list = list ; 
      this.list1 = list1; 
      layoutInflater = LayoutInflater.from(context); 
      viewHolder = new ViewHolder(); 
     } 

     @Override 
     public int getCount() { 
      return list.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      return list.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @SuppressLint("InflateParams") 
     @Override 
     public View getView(final int position, View convertView, 
       ViewGroup parent) { 
      View vi = convertView; 
      if (vi == null) { 
       vi = layoutInflater.inflate(R.layout.list_item, 
         parent, false); 

       viewHolder = new ViewHolder(); 
       /** Initialize Widgets */ 
       /** Imageview */ 
       viewHolder.imgUserIcon = (ImageView) vi 
         .findViewById(R.id.imgUserIcon); 
       viewHolder.imgImage = (ImageView) vi 
         .findViewById(R.id.imgImage); 

       viewHolder.imgUnlike = (ImageView) vi 
         .findViewById(R.id.imgUnlike); 
       viewHolder.imgUnlike.setTag(position); 

       viewHolder.imgLike = (ImageView) vi 
         .findViewById(R.id.imgLike); 
       viewHolder.imgLike.setTag(position); 



       /** TextView */ 
       viewHolder.txtPostId = (TextView) vi 
         .findViewById(R.id.txtPostId); 
       viewHolder.txtUserName = (TextView) vi 
         .findViewById(R.id.txtUserName); 
       viewHolder.txtDateTime = (TextView) vi 
         .findViewById(R.id.txtDateTime); 


       viewHolder.txtLikeUnlike = (TextView) vi 
         .findViewById(R.id.txtLikeUnlike); 
       viewHolder.txtLikeUnlike.setTag(position); 


       vi.setTag(viewHolder); 

      } else { 
       viewHolder = (ViewHolder) vi.getTag(); 
      } 



      final List listBean= list .get(position); 
      final List1 list1Bean= list1.get(position); 


      viewHolder.txtPostId.setText(listBean.getiPostId() 
        + ""); 
      viewHolder.txtUserName.setText(listBean.getName()); 

      viewHolder.txtDateTime.setText(listBean.getStrCreated()); 

      viewHolder.txtLikeUnlike.setText(listBean.getiLike() 
        + ""); 



      int iDisplayLike = list1Bean.getiDisplayLike(); 
      if (iDisplayLike == 1) { 
       viewHolder.imgUnlike.setVisibility(View.GONE); 
       viewHolder.imgLike.setVisibility(View.VISIBLE); 

      } 
      if (iDisplayLike == 0) { 
       viewHolder.imgLike.setVisibility(View.GONE); 
       viewHolder.imgUnlike.setVisibility(View.VISIBLE); 

      } 

      }); 
      return vi; 
     } 

     class ViewHolder { 
      ImageView imgIcon = null, imgImage = null, 
        imgUnlike = null; 
      TextView txtPostId = null, txtUserName = null, 
        txtDateTime = null, 
        txtLikeUnlike = null; 
     } 
+0

List1을 사용하고 있습니까? 단일 목록에 바인딩하고 모델 클래스 또는 해시 맵 목록을 사용하십시오 –

+0

여기에 어댑터를 게시하십시오. –

+0

@Ravi beacuse 두 개의 ArrayList를 사용 했으므로 두 개의 테이블을 사용했습니다. – Reena

답변

0

두 개의 테이블에서 데이터를 가져 오는 경우 먼저 두 ArrayList 다음 대신이 목록의 데이터를 표시 어댑터를 하나의 ArrayList을 통과 마지.

Adapter1 클래스 생성자의 마지 모두의 ArrayList에서

:

private ArrayList<DataType> finalList; 
public Adapter1(Context mContext,ArrayList list1,ArrayList list2){ 
    finalList = new ArrayList<DataType>(list1); 
    finalList.addAll(list2); 
} 

이제 어댑터의 getViewgetCount 방법에 대한 finalList를 사용하면이 목록이 필요 왜 당신이 List

관련 문제