안드로이드 개발 질문/답변
(글 수 45,052)
public class TeamProjectActivity extends Activity {
ListView listnews;
ArrayList<News> newslist = new ArrayList<News>();
NewsAdapter newsadapter;
String newstitle;
String newslink;
Intent intent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listnews = (ListView)findViewById(R.id.newsmainlist);
newsadapter = new NewsAdapter(TeamProjectActivity.this, R.layout.news, newslist);
//더보기
LinearLayout listfooter = (LinearLayout)View.inflate(TeamProjectActivity.this,R.layout.addlist,null);
listnews.addFooterView(listfooter);
//리스트에 어댑터 붙이기
listnews.setAdapter(newsadapter);
listnews.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View ve, int position,long arg3){
intent = new Intent(TeamProjectActivity.this,NewsActivity.class);
intent.putExtra("newslink",newslist.get(position).newslink);
startActivityForResult(intent,0);
}
});
}
이러한 에러는 예외 처리를 하면 된다고 들었는데
어떤식으로 처리를 해야하는지 도무지 모르겠습니다.
2012.02.03 15:14:55
listnews.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View ve, int position,long arg3){
intent = new Intent(TeamProjectActivity.this,NewsActivity.class);
intent.putExtra("newslink",newslist.get(position).newslink);
startActivityForResult(intent,0);
위에서
if( position < newslist.size() )
{
intent = new Intent(TeamProjectActivity.this,NewsActivity.class);
intent.putExtra("newslink",newslist.get(position).newslink);
startActivityForResult(intent,0);
}
이렇게 수정하시면 될 것 같아요




위 에러는 newslist 이 리스트가 총 12개, 그러니깐 0번부터 11번까지밖에 없는데
12번을 읽으려고 해서 나는 에러입니다.
12번을 읽으려는 이유는
위에서 footerview를 add하셨기때문에 실제로 listview에는 13개의 아이템이 들어가 있습니다.
첫번째 아이템을 클릭하게되면 위에 리스너에 다신 것 처럼
intent.putExtra("newslink",newslist.get(position).newslink); 이 구문에서 get(0)을 하게 됩니다.
하지만 맨 마지막 footerview를 클릭하게 되면 listview에서 13번째 리스트가 클릭되고
위와 동일하게 newslist.get(12) 가 실행되는데
newslist는 12개의 리스트이기 때문에 13번째를 가져오면 어레이아웃오브바운드에러가 나게됩니다.
클릭리스너에서 클릭이벤트 발생시 맨 마지막 뷰가 클릭되었을때는 무시하는 구문을 넣으시면 될 것 같습니다.