2013-08-01 4 views
0

나는 항목 목록을 표시하고 사용자가 선택할 수있는 Android 응용 프로그램을 만들고 있습니다. 항목이 있지만 응용 프로그램이 항상 코드 충돌이 발생해도 충돌이 발생하면 목록을 업데이트하려고합니다. 내가 한 OnCreate 방법에 목록 어댑터를 업데이트하는 방법

을 뭐하는 거지 아래는 showArray는 하늘의 배열이며, 지금은 applciation의 작품, 내가 순간에 아래 코드

adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
setListAdapter(adapter); 

을 가지고있다.

다음에는 showArray에 데이터를 삽입하는 중이고 다른 방법으로 목록 어댑터를 업데이트하려고합니다.

adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
setListAdapter(adapter); 

하지만 응용 프로그램이 충돌 : 나는 아래의 코드를 사용하고 있습니다. 다시 한 번

adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
adapter.notifyDataSetChanged(); 

하지만 운 : 나는 내 코드를 변경했습니다.

내 전체 코드는 다음과 같습니다 :

public class Fragment_AllCommunities extends Fragment { 
    OnHeadlineSelectedListener callBack; 

    // The container Activity must implement this interface so the frag can deliver messages 
    public interface OnHeadlineSelectedListener { 
     public void onCommunitySelected(int position); 
    } 

    private ProgressDialog progress; 
    private Activity activity; 
    private JSONArray communities; 
    private JSONObject[] commDetails; 
    private String[] showArray = {""}; 
    private int layout = 0; 
    private ArrayAdapter<String> adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // We need to use a different list item layout for devices older than Honeycomb 
     layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1; 

     adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
     setListAdapter(adapter); 
    } 

    public void updateAllCommunities(JSONObject[] commArr) throws JSONException { 
     commDetails = commArr; 

     showArray = new String[commDetails.length]; 

     for(int i=0;i<commDetails.length;i++) 
     { 
      showArray[i] = commDetails[i].getString("name").toString(); 
     } 

     //adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
     //adapter.notifyDataSetChanged(); 

     try 
     { 
      adapter.notifyDataSetChanged(); 
     } 
     catch(Exception ex) 
     { 
      String s = ex.getMessage(); 
     } 

    } 


    @Override 
    public void onStart() { 
     super.onStart(); 
     if (getFragmentManager().findFragmentById(R.id.view_community_fragment) != null) { 
      getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
      //getListView().setItemChecked(0, true); 
     } 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      callBack = (OnHeadlineSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
       + " must implement OnHeadlineSelectedListener"); 
     } 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     callBack.onCommunitySelected(position); 

     getListView().setItemChecked(position, true); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     String a = "S"; 
    } 
} 

사람이 내가 잘못 PLS를하고있는 중이 야 무엇을 말해 줄 수? 당신은 당신의 목록보기에 업데이트 된 데이터의 어댑터를 업데이트합니다이 code.It를 넣어 목록을 업데이트하려면 미리 에서

덕분에

+0

LogCat에서 stacktrace가 필요합니다. –

+0

stacktrace를 질문에 추가하십시오. –

+0

당신은 그것을 어떻게하는지 말해 줄 수 있습니까? 나는 안드로이드에서 초보자입니다. sry and thanks –

답변

0

클라이브 모든 응답을 주셔서 감사합니다.

adapter.notifyDataSetChanged(); 
+0

널 포인터 예외가 발생하고 있습니다. y는 알지 못합니다. –

+0

wheather adapter가 초기화되어 있고 adapter.notifyDataSetChanged()를 호출하기 전에 데이터가 설정되어 있는지 확인하십시오. –

1

나는 문제가 한 번 이상 setListAdapter 이상을 요구하고 있음을 확신합니다. ListFragment를 생성 할 때만 호출해야합니다. 목록을 수정하려면 어댑터의 add()remove() 메서드를 호출하여 기본 데이터 구조에 데이터를 추가해야합니다.

즉 :

adapter.add(object); 
adapter.notifyDataSetChanged() 

보통 나는 어댑터에 데이터를 추가하기위한 래퍼 방법을 만들 수 있습니다.

+0

항상 null 포인터 예외입니다. 왜 이런 일이 일어나는지 모르겠습니다. 나는 전체 수업을 바꾸려고 노력할지도 모른다. 어쩌면 나는 그것을 잘 만든다. –

+0

@CliveCauchi NPE는 무엇을위한 것인가? 그 정보를 알려주시겠습니까? –

+0

@CliveCauchi 방금 한 가지 더 생각했습니다. 이 자습서에 표시된 것처럼 onCreate에서 onActivityCreated로 코드를 옮겨보십시오. http://www.vogella.com/articles/AndroidListView/#listfragments NPE의 문제점은 Activity가 아니기 때문에 null을 반환 할 수 있습니다. 아직 만들어지지 않았다. –

관련 문제