태그 보관물: android-arrayadapter

android-arrayadapter

notifyDataSetChanged 예제 대답은 , notifyDataSetChanged()메인 스레드에서

내에서 사용하기 위해 노력하고있어 위한 방법 하지만 나를 위해 작동하지 않습니다.Android ApplicationnotifyDataSetChanged()ArrayAdapter

내가 발견 여기에 대답은 , notifyDataSetChanged()메인 스레드에서 실행해야합니다,하지만에 대한 예는 없었다.

누구든지 예제를 보내거나 적어도 링크를 보낼 수 있습니까?!



답변

를 들어 ArrayAdapter, notifyDataSetChanged당신이 사용하는 경우에만 작동합니다 add(), insert(), remove(), 및 clear()어댑터에.

를 구성 할 때 전달 된 ArrayAdapter참조에 대한 참조를 보유합니다 List. List활동의 멤버 인에 전달하고 나중에 해당 활동 멤버를 변경하는 경우 ArrayAdapter여전히 원본에 대한 참조를 보유합니다 List. 어댑터가 List활동에서 변경 한 것을 알 수 없습니다 .

당신의 선택은 :

  1. 의 기능을 사용하여 ArrayAdapter기본 목록을 수정 ( add(), insert(), remove(), clear(), 등)
  2. ArrayAdapterList데이터로를 다시 작성하십시오 . 많은 리소스와 가비지 수집을 사용합니다.
  3. 자신의 클래스에서 파생 생성 BaseAdapter하고 ListAdapter그 기본으로 변경 할 수 있습니다 List데이터 구조.
  4. notifyDataSetChanged()목록이 업데이트 될 때마다 사용하십시오 . UI-Thread에서 호출하려면 runOnUiThread()of를 사용하십시오 Activity. 그런 다음 notifyDataSetChanged()작동합니다.

답변

runOnUiThread()다음과 같은 방법을 사용할 수 있습니다 . 를 사용하지 않는 경우 ListActivity코드를 조정하여에 대한 참조를 얻으십시오 ArrayAdapter.

final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter());
runOnUiThread(new Runnable() {
    public void run() {
        adapter.notifyDataSetChanged();
    }
});

답변

나는 최근 에이 주제에 대해 썼지 만이 게시물은 오래되었지만 BaseAdapter.notifyDataSetChanged()단계별로 올바른 방법으로 구현하는 방법을 알고 싶은 사람에게 도움이 될 것이라고 생각했습니다 .

Android 또는 최신 블로그 BaseAdapter.notifyDataSetChanged () 에서 BaseAdapter.notifyDataSetChanged ()를 올바르게 구현하는 방법을 참조하십시오 .


답변

나는 같은 문제가 있었고 전체 ArrayAdapter를 새로운 인스턴스로 지속적으로 교체하지 않는 것을 선호합니다. 따라서 AdapterHelper가 다른 곳에서 무거운 작업을 수행하도록했습니다.

일반적으로 알림을 호출하려고하는 곳에 이것을 추가하십시오.

new AdapterHelper().update((ArrayAdapter)adapter, new ArrayList<Object>(yourArrayList));
adapter.notifyDataSetChanged();

AdapterHelper 클래스

public class AdapterHelper {
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void update(ArrayAdapter arrayAdapter, ArrayList<Object> listOfObject){
        arrayAdapter.clear();
        for (Object object : listOfObject){
            arrayAdapter.add(object);
        }
    }
}

답변

나는 이것이 늦은 응답이라는 것을 알고 있지만 비슷한 문제에 직면하고 notifyDataSetChanged()있으며 올바른 장소에서 사용하여 문제를 해결할 수 있었습니다.

내 상황은 다음과 같습니다.

완전히 다른 활동에서 반환 된 내용으로 작업 표시 줄 탭 (조각)에서 목록보기를 업데이트해야했습니다. 그러나 처음에는 목록보기에 변경 사항이 반영되지 않았습니다. 그러나 다른 탭을 클릭 한 다음 원하는 탭으로 돌아 가면 다른 활동의 올바른 내용으로 목록보기가 업데이트됩니다. 그래서 이것을 해결하기 위해 notifyDataSetChanged()데이터를 반환 해야하는 활동 코드에서 작업 표시 줄 어댑터를 사용했습니다.

이것은 활동에서 사용한 코드 스 니펫입니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId())
    {
        case R.id.action_new_forward:

            FragmentTab2.mListAdapter.notifyDataSetChanged();//this updates the adapter in my action bar tab
            Intent ina = new Intent(getApplicationContext(), MainActivity.class);
            ina.putExtra("stra", values1);
            startActivity(ina);// This is the code to start the parent activity of my action bar tab(fragment).
    }
}

이 활동은에 일부 데이터를 반환하고 FragmentTab2에서 내 목록보기를 직접 업데이트 FragmentTab2합니다.

누군가가 이것을 유용하게 사용하기를 바랍니다!


답변