【问题标题】:ListView is not showing inside a FragmentListView 未显示在 Fragment 内
【发布时间】:2016-10-20 14:35:11
【问题描述】:

我正在尝试使用此example 创建一个列表视图。但问题是 listview 根本没有显示。我正在尝试在片段中显示列表视图。显示代码的列表视图如下: BookListFragment.java

public class BookListFragment extends Fragment {
private String[] booktitle;
private String[] call_no;
private String[] due_date;
private String[] renewal;
ArrayList<String[]> bookDetails;
ListView bookList;
BookdetailsAdapter bookdetailsAdapter;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_booklist,
            container, false);

    bookList = (ListView) view.findViewById(R.id.BooklistView);


    DBadapter dBadapter = new DBadapter(getActivity().getApplicationContext());
    booktitle = dBadapter.getBookName();
    call_no = dBadapter.getCallNo();
    due_date = dBadapter.getDue();
    renewal = dBadapter.getRenew();

    bookDetails = new ArrayList<>();
    for (int i = 0; i < 3; i++) {
        String[] temp = new String[4];
        temp[0] = booktitle[i];
        temp[1] = call_no[i];
        temp[2] = due_date[i];
        temp[3] = renewal[i];

        bookDetails.add(temp);
    }

    bookdetailsAdapter = new BookdetailsAdapter(getActivity(), bookDetails);

    bookList.setAdapter(bookdetailsAdapter);

    return view;
}}

显示listview的Adapter是BookdetailsAdapter.java

public class BookdetailsAdapter extends ArrayAdapter<String> {
Activity context;
ArrayList<String[]> book;

public BookdetailsAdapter(Activity context, ArrayList<String[]> book) {
    super(context, R.layout.booklistview);
    this.context = context;
    this.book = book;
}

static class ViewHolderItem {
    TextView bookTitle, call_no, due, renewal;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolderItem viewHolder;
    if (convertView == null) {
        LayoutInflater inflater = context.getLayoutInflater();
        convertView = inflater.inflate(R.layout.booklistview, null, true);
        viewHolder = new ViewHolderItem();
        viewHolder.bookTitle = (TextView) convertView.findViewById(R.id.BookTitle);
        viewHolder.call_no = (TextView) convertView.findViewById(R.id.Call_no);
        viewHolder.due = (TextView) convertView.findViewById(R.id.Due_Date);
        viewHolder.renewal = (TextView) convertView.findViewById(R.id.Remaining_renewal);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolderItem) convertView.getTag();
    }

    String bookInfo[] = book.get(position);
    viewHolder.bookTitle.setText("Pial");
    viewHolder.call_no.setText("dada");
    viewHolder.due.setText("dadada");
    viewHolder.renewal.setText("dadadada");

    return convertView;
}}

两个布局文件都在这里fragment_booklist.xmlbooklistview.xml

如何显示此列表视图?

【问题讨论】:

标签: android listview


【解决方案1】:

要么将你的数据传递给超级适配器类,要么覆盖适配器的 getCount() 方法并给它书籍的数量。

您的适配器未提供有关它有多少项目的信息。

【讨论】:

  • 谢谢,重写 getCount() 方法解决了这个问题。我其实不知道这件事。是否必须为任何类型的列表视图适配器重写此方法?
  • 是的,基本上你在Android上使用的所有适配器都需要提供其底层数据集的计数
【解决方案2】:

xml 看起来很棒。

也许放

bookList = (ListView) getView().findViewById(R.id.BooklistView);


DBadapter dBadapter = new DBadapter(getActivity().getApplicationContext());
booktitle = dBadapter.getBookName();
call_no = dBadapter.getCallNo();
due_date = dBadapter.getDue();
renewal = dBadapter.getRenew();

bookDetails = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    String[] temp = new String[4];
    temp[0] = booktitle[i];
    temp[1] = call_no[i];
    temp[2] = due_date[i];
    temp[3] = renewal[i];

    bookDetails.add(temp);
}

bookdetailsAdapter = new BookdetailsAdapter(getActivity(), bookDetails);

bookList.setAdapter(bookdetailsAdapter);

进入片段的onViewCreated

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    相关资源
    最近更新 更多