9

我試圖創建一個自定義ArrayAdapter用於我的ListFragment。目前ListFragment中沒有顯示任何內容,TextView說明它是什麼片段。我已在我的適配器的getView()方法中放置了一個斷點,並且未被調用。我搜索了一些不會被調用的原因,有些人似乎認爲我的ListView是隱藏的,所以我試過將layout_height更改爲wrap_content,但那不起作用。ListFragment中的自定義ArrayAdapter

而且,我一直在關注這個開發者頁面的代碼:http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html

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:

我已經制定了自定義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()。它的邏輯是因爲擴展類不使用你的重載項目,所以它不知道它的大小。 –

相關問題