9

ListFragment에 사용할 사용자 정의 ArrayAdapter을 작성하려고합니다. 지금은 ListFragment에 표시되는 것이 없으며 어떤 단편 번호인지를 나타내는 TextView을 제외하고는 표시되지 않습니다. 내 어댑터의 getView() 메서드에 중단 점을 넣었습니다. 호출되고 있지 않습니다. 나는 전화를하지 않을 이유를 찾고 어떤 사람들은 ListView가 숨겨져 있다고 생각하는 것 같습니다. 따라서 layout_heightwrap_content으로 변경하려고 시도했지만 작동하지 않았습니다. http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.htmlListFragment의 사용자 정의 ArrayAdapter

ListFragment :

public class HomeFragment extends ListFragment implements FragmentTitle 
{ 
private int mNum = 0; 
private String mTitle = "Home"; 
private ListView mListView; 
private MyArrayAdapter mAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    mNum = getArguments() != null ? getArguments().getInt("num") : 1; 
    InfoContainer temp = new InfoContainer("test1", "test2"); 
    mAdapter = new MyArrayAdapter(getActivity(), android.R.id.list, temp); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View v1 = inflater.inflate(R.layout.fragment_pager_list, container, false); 
    TextView tv = (TextView) v1.findViewById(R.id.text); 
    tv.setText("Fragment #" + mNum); 
    mListView = (ListView) v1.findViewById(android.R.id.list); 
    return v1; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    mListView.setAdapter(mAdapter); 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    Log.i("HomeFragment", "Item clicked: " + id); 
} 

public CharSequence getTitle() 
{ 
    return mTitle; 
} 

} 

ArrayAdapter와 :

public class MyArrayAdapter extends ArrayAdapter<InfoContainer> 
{ 
Context mContext; 
InfoContainer data; 

public MyArrayAdapter(Context context, int textViewResourceId, InfoContainer temp) 
{ 
    super(context, textViewResourceId); 
    mContext = context; 
    this.data = temp; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    ViewHolder holder = new ViewHolder(); 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); 
     row = inflater.inflate(R.id.pager, parent, false); 
     holder.v1 = (TextView) row.findViewById(R.id.listview_name); 
     holder.v2 = (TextView) row.findViewById(R.id.listview_data); 
     row.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder) row.getTag(); 
    } 
    InfoContainer info = data; 
    holder.v1.setText(info.name); 
    holder.v2.setText(info.text); 
    return row; 
} 

public static class ViewHolder 
{ 
    TextView v1; 
    TextView v2; 
} 

} 

fragment_pager_list.xml :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="#000000" > 

<TextView 
    android:id="@+id/text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical|center_horizontal" 
    android:text="@string/hello_world" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="#FFFFFF" /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:drawSelectorOnTop="false" 
     android:background="@drawable/listview_background" 
     android:textColor="#FFFFFF" /> 

또한,이 개발자 페이지에서 코드를 다음 봤는데

이전에 아무런 문제없이 사용자 정의 ArrayAdapters를 만들었으므로 ListFragment와 함께 작동시키지 못했습니까?

답변

6

해결책은 getCount()이 내 ArrayAdapter에 대해 0을 반환하고 있다는 것입니다. 그래서 저는 mAdapter.add(temp)을 사용한 다음 mAdapter.notifyDataSetChanged()을 사용했습니다. 나는 또한 라인을 row = inflater.inflate(R.id.pager, parent, false);로 바꿔야했다. row = inflater.inflate(R.layout.listview_row, parent, false);

+1

고마워. 나는 같은 문제가 있었고 실제로 getCount()에있었습니다. 확장 클래스가 오버로드 된 항목을 사용하지 않기 때문에 논리적입니다. 따라서 크기를 알 수 없습니다. –

관련 문제