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

리스트뷰 아이템 한줄 지우기

0 추천
안녕하세요

 

제가 구현중인 리스트에는 현재 서버에 접속중인 사람들의 목록이 아이템입니다.

 

서로간의 귓속말 같은 것을 할 수 있는데요 (무전기)

자기가 자기 자신에게 귓속말을 할 수는 없는 노릇이고 그럴 필요도 없으니

 

리스트를 뿌릴 때

if (getItem(position).getDeviceId().equals(DeviceId 가져오는 메서드)) {

// 해당 Item Row는 remove 한다.

}

네 이겁니다

일단 리스트 전체의 DeviceId를 검사하여 단말의 DeviceId와 비교해

해당 Row는 삭제? 보이지 않게 ?

어떻게 하나요.. 알려주세요 ㅠ

 

remove item from listview?

 

감사합니다...
윤둥이 (4,560 포인트) 님이 2013년 6월 25일 질문

1개의 답변

+1 추천
 
채택된 답변

안녕하세요!

list 에서 원하시는 부분을 삭제 하실려고 하시는 것 같네요.

list.remove(posttion);

삭제를 아이템을 삭제하시고,

adapter.notifyDataSetChanged();

어댑터에 리스트가 바뀐걸 알리고, 리스트를 다시 그리시면 될 듯 합니다.

도움이 되시길 바랍니다!

 

 

안드로메다개발자 (8,830 포인트) 님이 2013년 6월 25일 답변
윤둥이님이 2013년 6월 25일 채택됨
감사합니다

근데 list는 listActivity에 있고
adapter에는 list가 없는데요..

또 listActivity에서 remove(position) 하려면

서버에서 가져온 deviceId를 현재 단말에 있는 DeviceId 와 비교를 해서 remove 해야하는데
그 부분은 adapter에서 도맡아 하고있고요...
자기 자신을 목록에서 안보이게 하시고 싶으신건가요?
그렇다면 서버에 목록을 받아올때, 현재 단말의 DeviceId를 가져가신
다음 현재 단말의 DeviceId를 제외한 나머지를 가져오셔서 리스트에
출력해주시면 되시는 거 아닌가요?
SELECT * FROM 테이블명 WHERE NOT 컬럼명 ='데이터값'
그렇다면, 이렇게 쿼리를 보내주시면 될 것 같구요!
제 답변이 맞는 지 확인 부탁드려요^^*
하하.. DB랑 상관이 없습니다..

DB에서 select 해서 보여주는게 아니라
서버에서 바로 내려받는 방식입니다..
아 제가 잘못이해했네요^^;;
그렇다면, list를 다시 재구성하면 되겠네요!
예를 들어,
List<String> list = new ArrayList<String>();

list.add("AAAA");
list.add("BBBB");
list.add("CCCC");
list.add("DDDD");
list.add("EEEE");
list.add("FFFF");
list.add("GGGG");

for(Iterator<String> it = list.iterator() ; it.hasNext() ; )
{
        String value = it.next();
        
        if(value.startsWith("C"))
        {
                it.remove();
        }
}

System.out.println("Result: " + list);
이렇게 하시면 결과 값을 이렇게 가져올 수 있습니다.
Result: [AAAA, BBBB, DDDD, EEEE, FFFF, GGGG]
이 방법이 도움이 되시나요?^^*
제가 좀 많이 부족하여... 솔직히 잘 못알아듣겠습니다....

ListActivity 에서는

talkerList = (List<DeviceInfo>)InfoStorage.getInstance().get(InfoStorage.FULL_TALKER_LIST);
                    mListView.setAdapter(new TalkerListAdapter(TalkerListActivity.this, R.layout.layout_talker_row, talkerList));
                    talkerList.add(new DeviceInfo());

이렇게 sedAdapter 시켜주고..

Adapter 의 getView() 함수 안에서는

String deviceId = (String)InfoStorage.getInstance().get(InfoStorage.DEVICE_ID);
        if (getItem(position).getDeviceId().equals(deviceId)) {
//행 삭제           
        }
이렇게 진행중입니다..
talkerList << 이게 서버에서 받아오신 리스트인것같은데요.
이 부분을 iterator로 다시 재구성하는겁니다.
for(Iterator<DeviceInfo> it = talkerList.iterator() ; it.hasNext() ; )
 {
         DeviceInfo value = it.next();
         
         if(value.equals(deviceId))
         {
                 it.remove();
         }
 }
이런 식으로 구현될려나요?
이 작업을 거친 다음 다시 talkerList를 adapter에 넣어주는 방법이지요^^*
당연히 자신의 deviceId는 미리 알고 있어야 하겠지요?
도움이 되셨나요 ?
너무너무 친절하신 답변 감사합니다..

talkerList = (List<DeviceInfo>)InfoStorage.getInstance().get(InfoStorage.FULL_TALKER_LIST);
                   
                    String deviceId = (String)InfoStorage.getInstance().get(InfoStorage.DEVICE_ID);
                    for(Iterator<DeviceInfo> it = talkerList.iterator(); it.hasNext();) {
                        DeviceInfo value = it.next();
                       
                        if (value.equals(deviceId))
                            it.remove();
                    }
                    
                    mListView.setAdapter(new TalkerListAdapter(TalkerListActivity.this, R.layout.layout_talker_row, talkerList));
                    talkerList.add(new DeviceInfo());

이렇게 해서 지금 Activity에 처리를 했는데요

딱히 변하는건 없는 것 같습니다..
제 생각엔 DeviceInfo 형 value 변수에 DeviceId가 저장안되는거같습니다..
이렇게 처리를 하는게 최선인듯한데요^^;
어떻게 돌아가는 루트는 아시겠나요 ? DeviceInfo 이것은 제가 임의적으로 넣은 것이며, 일단 리스트를 받아오는지 확인하시구요.. 현재 deviceId를 확인 하는지 iterator 돌고 나서의 list도 한번 확인해보시기 바랍니다!
한번 이거 돌려보고 싶네요^^ ㅎㅎㅎ
iterator 돌고나서 list는 이 전의 리스트와 같습니다

DeviceInfo는 물론 제가 정보를 얻어왔습니다..

근데 value에 저장된 값은 DeviceInfo List의 Item ID 같은게 들어있떠군요

06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b52810
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b61418
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b3a5b8
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b62398
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42ab7b48
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b61fc8
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b3c230
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b62ec8
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42abde48
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b339e8
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b4e098
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42ab8ff8
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42ab9338
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b4db00
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b34160
06-25 16:25:39.802: E/PVT(19170): com.btb.pump.pvt.vo.DeviceInfo@42b34490


벨류를 로그로 찍으니.. ^^;

전 벨류에 DeviceInfo.getDeviceId가 들어가야 하는 상황인데..ㅎㅎ
궁금한게 있는데요..
talkerList.add(new DeviceInfo());
이 부분은 무엇을 하는 부분인가요 ? 리스트에 다시 추가 하시나요 ?
전역변수로
private ArrayList<DeviceInfo> takerList ;
선언해주시고,
talkerList = InfoStorage.getInstance().get(InfoStorage.FULL_TALKER_LIST);
String deviceId = takerList.getInstance().get(InfoStorage.DEVICE_ID);
for(Iterator<DeviceInfo> it = talkerList.iterator(); it.hasNext();) {
                         DeviceInfo value = it.next();
                         
                         if (value.equals(deviceId))
                             it.remove();
                     }
                     
                     mListView.setAdapter(new TalkerListAdapter(TalkerListActivity.this, R.layout.layout_talker_row, talkerList));
 이렇게 구성되는거 아닌지요^^
맞아요 ^^^^^^^
됐습니다

개발자님 말씀대로 해서 ㅎㅎ 제가 너무 못하나바여 ㅎㅎㅎ

어댑터에 넣기전에 지웠습니다.

for (Iterator<DeviceInfo> it = talkerList.iterator(); it.hasNext();) {
                        DeviceInfo value = it.next();

                        if (value.getDeviceId().equals(deviceId))
                            it.remove();
                    }

ㅎㅎ 감사합니다

밥사드릴께여 구로디지털단지로오세여..ㅠㅠ
해결하셨다니 다행이네요^^* 좋은 마음으로 퇴근할수있겠네요 ㅎ ㅎ
...