마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

클릭 메소드에서 position 받기

0 추천
 
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return listArr.size();
}
 
@Override
public Object getItem(int position) {
return listArr.get(position);
}
 
@Override
public long getItemId(int position) {
return position;
}
 
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inf = getLayoutInflater();
View v1 = inf.inflate(R.layout.list_search, null);
tv = (TextView) v1.findViewById(R.id.txSearch);
bt = (Button) v1.findViewById(R.id.btSearch);
 
if (listArr.size() > 0) {
tv.setText(listArr.get(position).getStrKeyword());
bt.setText(listArr.get(position).getStrUserId());
temposition = position;
}
return v1;
}
}
 
public void OnClickMethod(View v) {
try{
if (socket != null && socket.isConnected()) {
Log.d("송신1","송신1");
st = Integer.toString(temposition);
Log.e("st",st);
mUserId=listArr.get(temposition).getStrUserId();
Log.d("mUserId",mUserId);
 
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
 
long time = System.currentTimeMillis();
Date date = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
 
String thisTime = sdf.format(date);
String strSend = mUserId + "#" +"\t"+StaticObj.mId+ "#" + thisTime;
 
out.println(strSend);
out.flush();}
}catch (Exception e) {
handler.post(new Runnable() {
public void run() {
Chatting.showDialog(mainac, "", "mainac2");
}
});
}
 
flag = false;
intent = new Intent(TabSearch.this, Chatting.class);
intent.putExtra("id", listArr.get(temposition).getStrUserId());
startActivity(intent);
finish();
}
 
temposition = position; 이렇게 position 값을 가져와 클릭메소드에서 사용하고 있습니다
 
그런데 0번째 클릭을하면 temposition 에는 7이 들어가던지 엉뚱한 숫자가 계속 들어갑니다.
 
왜이런걸까요 ㅜㅜ
숀화이트 (3,310 포인트) 님이 2014년 2월 26일 질문

4개의 답변

+1 추천
 
채택된 답변
setTag, getTag 사용해보세요.
네버그린 (1,290 포인트) 님이 2014년 2월 26일 답변
숀화이트님이 2014년 4월 2일 채택됨
0 추천
listview 에 대한 이해를 먼저 해야 됩니다. 리스트 목록이 100 라고 했을 때에 각 리스트 만큼 즉 100개를 row 로 생성하지 않습니다.  그 부분 기억 하시구요 관련된 내용은 찾아보시기 바랍니다.

 

row 를 클릭하는 것 이라면 onItemClickListener 를 이용하세요 그곳에 position 값이 넘어오니 그걸 참조하세요

https://www.google.co.kr/search?q=fragment&oq=fragment&aqs=chrome..69i57j0l5.3032j0j4&sourceid=chrome&espv=2&es_sm=125&ie=UTF-8#newwindow=1&q=android+listview+onItemClicklistener
aucd29 (218,390 포인트) 님이 2014년 2월 26일 답변
0 추천

temposition을 써야겠다..하시면 

getView안에 OnClickListener 구현하세요~

노예의집 (23,370 포인트) 님이 2014년 2월 26일 답변
0 추천

getView 함수는 ListView 안에 row가 그려지려고 할때 호출되는 함수로 여기에서 tempposition에 저장한다고 클릭되었을때 위치가 저장되는 것은 아니죠.

onItemClickListener 함수가 해당 row가 클릭되었을때 호출되는 함수이고 이곳에서 position을 얻어야 하구요.

만약 ListView 안에 row에 버튼이 있고 해당 버튼을 클릭했을 때 OnClickMethod가 동작하는 것 처럼 되길 원하신다면,

버튼에 setOnClickListener 함수를 이용해서 OnclickListener를 구현해 주셔야 합니다.

익명사용자 님이 2014년 2월 26일 답변
...