Tôi đang cố tạo một tùy chỉnh ArrayAdapter
để sử dụng cho số ListFragment
của mình. Hiện tại, không có gì được hiển thị trong số ListFragment
ngoại trừ số TextView
cho biết số Fragment là gì. Tôi đã đặt một breakpoint trong getView()
phương pháp của bộ điều hợp của tôi và nó không được gọi. Tôi đã tìm kiếm các lý do không được gọi và một số người dường như nghĩ rằng ListView của tôi bị ẩn, vì vậy tôi đã thử thay đổi layout_height
thành wrap_content
, nhưng điều đó không hiệu quả.Custom ArrayAdapter trong một ListFragment
Ngoài ra, tôi đã làm theo các mã từ trang của nhà phát triển này: 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:
Tôi đã tạo các ArrayAdapters tùy chỉnh trước đó mà không có vấn đề gì, vì vậy có điều gì đó mà tôi thiếu trong việc làm cho chúng hoạt động với ListFragment?
Cảm ơn. Tôi đã có cùng một vấn đề và nó đã thực sự trong getCount(). Hợp lý bởi vì lớp mở rộng không sử dụng các mục quá tải của bạn nên nó không biết kích thước của nó. –