1

arrayindexoutofbounds 예외가 발생합니다. 내 어댑터 코드는android arrayindexoutofouts listview를 사용하는 동안 예외가 발생했습니다.

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 LevelAdapter extends ArrayAdapter<Level> { 

    static Context context; 
     static int layoutResourceId; 
     static Level data[] = null; 

    public LevelAdapter(Context context, int layoutResourceId, Level[] data) { 
      super(context, layoutResourceId, data); 
      this.layoutResourceId = layoutResourceId; 
      this.context = context; 
      this.data = data; 
     } 

     /* public LevelAdapter(ShowFrag1 showFrag1, int listItem, 
       Level[] weather_data) { 
      super(context, layoutResourceId, data); 
      this.layoutResourceId = layoutResourceId; 
      this.context = context; 
      this.data = data; 

      // TODO Auto-generated constructor stub 
     }*/ 

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

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

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

       holder = new WeatherHolder(); 
       // holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon); 
       holder.txtTitle = (TextView)row.findViewById(R.id.txt); 
       // holder.imgIcon2=(ImageView)row.findViewById(R.id.imgIcon2); 
       Typeface robotoLight = Typeface.createFromAsset(getContext().getAssets(), "Roboto-Light.ttf"); 
       holder.txtTitle.setTypeface(robotoLight); 

       row.setTag(holder); 
      } 
      else 
      { 
       holder = (WeatherHolder)row.getTag(); 
      } 

      Level weather = data[position]; 
      holder.txtTitle.setText(weather.title); 
     // holder.imgIcon.setImageResource(weather.icon); 

      return row; 
     } 

     static class WeatherHolder 
     { 
     // ImageView imgIcon; 
      TextView txtTitle; 
     // ImageView imgIcon2; 
     } 

} 

하고 목록보기를 사용하여 조각에 대한 코드는 다음과

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class AboutFrag3 extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v=inflater.inflate(R.layout.aboutfrag3, container,false); 
     ListView lv1=(ListView) v.findViewById(R.id.listView1); 
     ListView lv2=(ListView)v.findViewById(R.id.listView2); 
     Level weather_data[] = new Level[] 
       { 

        new Level(R.drawable.sac1, "O63", R.drawable.play_button), 
        new Level(R.drawable.sn2, "O26",R.drawable.play_button), 
        new Level(R.drawable.sn3, "O",R.drawable.play_button), 
        new Level(R.drawable.sn4, "O83",R.drawable.play_button), 
        new Level(R.drawable.sn6, "O.23",R.drawable.play_button), 
        new Level(R.drawable.sn6, "O9",R.drawable.play_button), 
        new Level(R.drawable.sn6, "O96",R.drawable.play_button), 
        new Level(R.drawable.sn6, "T98",R.drawable.play_button), 
        new Level(R.drawable.sn6, "T37",R.drawable.play_button), 
        new Level(R.drawable.sn6, "T248",R.drawable.play_button), 
        new Level(R.drawable.sn6, "T.87",R.drawable.play_button), 
        new Level(R.drawable.s6, "Tee: 54.06",R.drawable.play_button), 
        new Level(R.drawable.sn6, "T1",R.drawable.play_button), 
        new Level(R.drawable.s6, "Te",R.drawable.play_button) 


       }; 
     Level weather_data2[] = new Level[] 
       { 
       new Level(R.drawable.s1,"O3",R.drawable.play_button), 
       new Level(R.drawable.s1,"O 154",R.drawable.play_button), 
       new Level(R.drawable.s1,"O2",R.drawable.play_button), 
       new Level(R.drawable.sh1,"O: 5.11",R.drawable.play_button), 
       new Level(R.drawable.s1, "Te8",R.drawable.play_button), 
       new Level(R.drawable.s1, "T5",R.drawable.play_button), 
       new Level(R.drawable.s1, "T-10",R.drawable.play_button), 
       new Level(R.drawable.s1, "T52",R.drawable.play_button) 
       }; 
     LevelAdapter adapter = new LevelAdapter(getActivity(), 
       R.layout.list_item, weather_data); 
     LevelAdapter adapter2 = new LevelAdapter(getActivity(), R.layout.list_item, weather_data2); 

     View header = inflater.inflate(R.layout.header2, null); 
     //View header2 = inflater.inflate(R.layout.header, null); 
     View header3 = inflater.inflate(R.layout.header3, null); 
     lv1.addHeaderView(header); 
     lv2.addHeaderView(header3); 
     lv1.setAdapter(adapter); 
     lv2.setAdapter(adapter2); 
     Utility.setListViewHeightBasedOnChildren(lv1); 
     Utility.setListViewHeightBasedOnChildren(lv2); 
     return v; 
    } 
} 

내가

Level weather = data[position]; 

내가 잘못려고하고이 라인에 arrayindexoutofbounds 예외를 얻고있다 ? 감사합니다.

답변

1

귀하의 data[]static이기 때문입니다. static 속성을 만들면 해당 클래스에서 파생 된 모든 개체에 대해 속성이 동일하게됩니다. 이 문제를 해결하려면 데이터가 static이 아닌지 확인하십시오.

+0

예! 고마워. –

+0

문제는 없으며, 미래의 문제를 예방하기 위해서'context'와'layoutResourceId'를 비 정적으로 만들어야합니다. 필요하지 않은 경우 수식어를 추가하지 마십시오. – John

1

static으로 표시된 멤버 변수는 생성 한 개체 인스턴스의 수에 관계없이 한 번만 존재합니다. 두 어댑터 모두 동일한 data 구성원을 공유합니다.

관련 문제