나는 ArrayAdapter
과 함께 나의 목록보기에 대해 ArrayList<Color> colorList
을 가지고 있습니다. 내 POJO는 다음과 같습니다 :반복하지 않고 목록보기에서 항목을 삭제하는 방법
public class Color {
int id;
String name;
//getter setter
}
모든 것이 서버에서 가져옵니다. 따라서 각 색상 객체의 id
은 DB 테이블의 id
과 일치합니다.
내 ArrayAdapter's
getView
데이터베이스에서 id
으로 태그를 설정합니다. 위의 코드에서
holder.imageButton.setTag(item.getId()); //color id from database
holder.imageButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int id = (Integer) v.getTag();
new DeleteColor(id).execute();
}
});
나는 보낸다 클릭 한 항목의
id
내 목록보기에서 항목을 제거하는 쉬운 방법은 무엇입니까 삭제
의 서버에?는 내가 지금하고 있어요 것은 :
class DeleteColor extends AsyncTask<String, String, String> {
int id;
public DeleteColor (int id) {
this.id = id;
}
@Override
protected String doInBackground (String ... args) {
MyManager.INSTANCE.getService().deleteColor(id, new Callback<Integer>() {
@Override
public void success(Integer id, Response response) {
//loop through the colorlist to find which one to remove
for (int i = 0; i < colorList.size(); i++) {
Color c = colorList.get(i);
if (c.getId() == id) {
colorList.remove(c);
adapter.notifyDataSetChanged();
break;
}
}
}
@Override
public void failure(RetrofitError retrofitError) {
}
});
return "";
}
}
당신이 볼 수 있듯이, 나는 그것을 제거 그때 제거하려는 id
이있는 하나를 찾기 위해 전체 colorList
통해 반복하고 있어요. 이를 달성하기위한 좋은 접근 방법입니까?
질문
내가 삭제해야 할 일을 찾기 위해 전체 colorList
통해 반복 피할 수있는 방법.
'onPostExecute()'메소드에서'notifyDataSetChanged()'를 호출하십시오. – Houcine
물론 그렇지만 전체 목록을 반복적으로 조사하여 삭제할 항목을 찾는 문제는 해결되지 않습니다. 내가 지금 가지고있는 해결책은 잘 작동하고있다.하지만 당신 말이 맞아요.'notifyDataSetChanged()'를'onPostExecute()'로 옮길 수 있습니다. – Anthony
J0hj0h와 사운드 개념은 기본적으로 여기에 있습니다. indexOf()는 아마 가독성 측면에서 가장 쉬운 방법 일 것입니다.하지만 결정은 여러분이 결정합니다. indexOf() 소스는 기본적으로 수행중인 작업과 null 확인 작업을 수행합니다. List와 관련된 문제는 remove가 O (n) 작업이라는 것입니다. O (n)을 이기기 위해 제거가 필요하다면지도에 색상을 저장할 수 있지만 전체 코드를 보지 않아도 다른 합병증을 일으킬 지 확실하지 않습니다. 솔직히, 수백만 가지 색상이 부족하지만, O (n)은 좋을 것입니다. –