2013-08-15 3 views
0

사용자 지정 레이아웃이있는 조각 내부에 listView를 채우려고합니다. 그러나 응용 프로그램을 시작하면 listview의 내용이로드되지 않습니다 (어레이 어댑터를 사용하여 얻음). 여기 내가 목록보기로드 코드 : 여기조각의 ListView가 표시되지 않습니다.

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.activity_start, container, false); 
     ProfilesDatabaseHelper dbHelper = ac.getDbManager(); 
     ProfileManagerDAO dbDao = ac.getProfileManagerDAO(); 
     //TODO mettere profilehandler dentroo profileapp. 
     ProfileHandler handler = new ProfileHandler(view.getContext()); 
     Profile profile = handler.getCurrentProfile(); 
     TextView label = (TextView) view.findViewById(R.id.labelvlm); 
     label.setText("TEST"); 
     if(handler!=null){ 
      label.setText("Ring Volume: " + profile.getRingVolume() + "Max: " 
        + handler.getMaxVolume(AudioManager.STREAM_RING)); 
      label.append("\tVoice Call Volume: " + profile.getCallVolume() 
        + " Max: " + handler.getMaxVolume(AudioManager.STREAM_VOICE_CALL)); 
      //manager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 5, 0); 
      label.append("\tWIFI Status: " + handler.isWifiActive());   
     } 
     Ringtone tone = RingtoneManager.getRingtone(view.getContext(), Settings.System.DEFAULT_RINGTONE_URI); 
     if(tone!=null){ 
      label.append("\n" + tone.getTitle(view.getContext())); 
     } 
     SeekBar bar = (SeekBar) view.findViewById(R.id.ringtonevolumeBar); 
     bar.setMax(handler.getMaxVolume(AudioManager.STREAM_RING));  
     bar.setProgress(profile.getRingVolume()); 
     ArrayList<String> profiles = ac.getProfileManagerDAO().getprofileNamesList(); 
     if(profiles!=null){ 
      Log.d(TAG, "List size: " + profiles.size()); 
      ListView profileslist = (ListView) view.findViewById(R.id.profileslist);    
      adapter = new ProfilesArrayAdapter(view.getContext(), R.layout.list_item, profiles); 
      profileslist.setAdapter(adapter); 
//   List<String> testing = new ArrayList<String>(); 
//   testing.add("Hey"); 
//   testing.add("Hey Do"); 
//   testing.add("Hey It"); 
//   testing.add("Hey Please"); 
//   ArrayAdapter moviesAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, testing); 
//   profileslist.setAdapter(moviesAdapter); 
      //profileslist.setA 
     } 
     return view; 
    } 

내 CustomAdapter의 코드 :

public class ProfilesArrayAdapter extends 
    ArrayAdapter<HashMap<String, Integer>> { 

ArrayList<HashMap<String, Integer>> entries; 
int resourceId; 
Context context; 

static class ProfileItemHandler { 
    TextView profileId; 
    TextView profileName; 
} 

public ProfilesArrayAdapter(Context context, int layoutResourceId, ArrayList<HashMap<String,Integer>> profiles) { 
    super(context, layoutResourceId); 
    this.context = context; 
    this.resourceId = layoutResourceId; 
    this.entries = profiles; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ProfileItemHandler handler = null; 
    if(convertView==null){ 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(R.layout.list_item, parent, false); 
     handler = new ProfileItemHandler(); 
     handler.profileId = (TextView) row.findViewById(R.id.profileName); 
     handler.profileName = (TextView) row.findViewById(R.id.profileId); 
     row.setTag(handler); 
    } else { 
     handler = (ProfileItemHandler) row.getTag(); 
    } 
    HashMap<String, Integer> entry = this.getItem(position); 
    for(String cur_entry: entry.keySet()){ 
     handler.profileId.setText(cur_entry); 
     handler.profileName.setText(entry.get(cur_entry)); 
    }    
    return row; 
} 

}

을 그리고이 목록 항목 레이아웃에 대한 XML입니다 :

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView android:layout_height="wrap_content" android:id="@+id/profileId" android:text="TextView" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="wrap_content"></TextView> 
    <TextView android:text="TextView" android:id="@+id/profileName" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 

</LinearLayout> 

여기 주요 레이아웃 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_start" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".StartActivity" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/labelvlm" 
     android:text="@string/hello_world" /> 

    <SeekBar 
     android:id="@+id/ringtonevolumeBar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/labelvlm"   
     android:layout_marginTop="122dp" /> 

    <ListView 
     android:id="@+id/profileslist" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignLeft="@+id/ringtonevolumeBar" 
     android:layout_below="@+id/ringtonevolumeBar" 
     android:layout_marginTop="68dp" > 
    </ListView> 

</RelativeLayout> 

오류 메시지가 나타나지 않지만 응용 프로그램을 실행할 때 listView에 항목이 표시되지 않고 어댑터의 getView 메소드가 호출되지 않습니다. 어떤 생각?

+0

나는 그 문제에 관해 많은 질문을했지만, 아무도 내 문제를 해결하지 못하는 것 같습니다. : – Ivan

답변

2

문제점을 발견했습니다. 는 생성자 내부했다 :

첫 번째 줄에
public ProfilesArrayAdapter(Context context, int layoutResourceId, ArrayList<HashMap<String,Integer>> profiles) { 
    super(context, layoutResourceId); 
    this.context = context; 
    this.resourceId = layoutResourceId; 
    this.entries = profiles; 
} 

, 슈퍼 생성자 호출이 잘못되었습니다. 사실, 올바른 호출해야한다 : 그와

super(context, layoutResourceId, profiles); 

, 지금 목록이 제대로 채워집니다.

1

내 첫번째 추측 될 것입니다 (당신이 오류 메시지를 받고되지 않기 때문에)이 라인이 :

ArrayList<HashMap<String, Integer>> profiles = ac.getProfileManagerDAO().getprofileList(); 

은 일반적으로 크기 = 0 또는 와 빈 ArrayList를를 반환합니다. 따라서 ListView에는 항목이 없으며 getView()가 호출되지 않습니다.

단편 및 onCreateView 레이아웃 파일과 단편의 onCreateView() 메소드 및 활동의 onCreate() 메소드도 게시 할 수 있습니까?

ArrayList<HashMap<String, Integer>> profiles = ac.getProfileManagerDAO().getprofileList(); 
    if(profiles!=null){ 
     Log.d(TAG, "List size: " + profiles.size()); 
     ListView profileslist = (ListView) getActivity().findViewById(R.id.profileslist);   
     adapter = new ProfilesArrayAdapter(getActivity(), R.layout.list_item, profiles); 
     profileslist.setAdapter(adapter); 
    } 

조각 onCreateView() 메서드 내되지 않습니다 :이 코드는 왜

또한, 나 자신을 물어 무엇입니까? 그런 식으로 getActivity(). findViewById (...)를 호출하지 않겠지 만 은 부풀린 레이아웃에서 inflatedview.findViewById (...)를 직접 호출합니다.

업데이트 : 활동이 FragmentActivity를 확장합니까? 귀하의 액티비티 코드에서 Fragment가 레이아웃에 "추가"또는 "대체"된 부분은 어디입니까?

+0

체크,하지만 목록이 비어 있지 않습니다, 정확히 하나의 요소가 포함되어 있습니다. 코드 조각을 원래 onCreateView,하지만 그 문제를 해결하기 위해 노력했다 onCreateActivity 메서드 (onCreateView 후 호출됩니다) 안으로 이동했습니다. 조각을 xml 레이아웃으로 추가하는 해답을 편집하십시오. – Ivan

+0

감사합니다."기본 레이아웃"이 활동 또는 단편의 레이아웃 파일입니까? 액티비티의 onCreate() 메소드와 Fragments onCreateView() 메소드를 게시하십시오. –

+0

완료, 간단한 코드를 사용하여 간단한 arrayAdapter를 사용하여 listView를 올바르게 표시하는 코드를 주석으로 추가했습니다. – Ivan

관련 문제