当前位置: 首页 > 知识库问答 >
问题:

Android ListView和Fragment

韩阳飙
2023-03-14

具体问题是调用自定义arrayadapter的getView方法失败。我使用一个片段来显示一个列表。生成列表的活动允许从微调器中选择人员。然后,我使用所选人员的id从DB中检索数据。我将这些数据打包到指定给ArrayList的自定义holder对象中。以下是创建片段事务的活动代码。

FragmentTransaction fragmentTransaction = 
    getSupportFragmentManager().beginTransaction();

NotesListViewFragment notesListViewFragment = new NotesListViewFragment();
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(Constants.NOTES_LIST, (ArrayList) rowValues);
notesListViewFragment.setArguments(bundle);
fragmentTransaction.add(notesListViewFragment, "FRAG");
fragmentTransaction.commit();

片段正确地获取绑定的数据。onCreate方法和onCreateView方法执行正确。以下是onCreateView代码:

View view =  inflater.inflate(R.layout.note_list_fragment_layout, null);
    ListView notesListView = (ListView) 
view.findViewById(android.R.id.list);
    //ListView notesListView = (ListView) view.findViewById(android:list);

notesListView.addHeaderView(inflater.inflate(R.layout.notes_list_headings, 
    container, false));
View footer = ((LayoutInflater) context.getSystemService
            (Context.LAYOUT_INFLATER_SERVICE))
            .inflate(R.layout.notes_list_footer, null);
TextView v = (TextView) footer.findViewById(R.id.total_notes);
v.setText(Integer.toString(notesList.size()));
v.setTypeface(font);
footer.setPadding(30, 25, 0, 0);
notesListView.addFooterView(footer);

CustomNotesListAdapter adapter = new CustomNotesListAdapter(context,
            R.layout.notes_list_row_layout, notesList);
            //R.layout.notes_list_row_layout, notesList, false);
adapter.notifyDataSetChanged();
notesListView.setAdapter(adapter);
//setListAdapter(adapter);

return view;

创建适配器后,它将数据包含在“notesList”中。调用适配器构造函数和getCount方法,返回正确的行数。永远不会调用getView方法,并且设备上不会显示任何内容。下面是getView方法。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
NoteListHolder noteListHolder = getItem(position);

if (convertView == null) {
    //LayoutInflater inflater = (LayoutInflater) context
                //.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = ((LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                .inflate(layoutResourceId, null);
    viewHolder = new ViewHolder();
        viewHolder.imageView = (ImageView) 
    convertView.findViewById(R.id.note_image);
        viewHolder.noteText = (TextView) 
  convertView.findViewById(R.id.note_text);
        viewHolder.updatedDate = (TextView) 
convertView.findViewById(R.id.updated_date);
        viewHolder.updatedBy = (TextView) 
convertView.findViewById(R.id.updated_date);
        viewHolder.noteSource = (TextView) 
convertView.findViewById(R.id.note_source);
        convertView.setTag(viewHolder);

    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.noteText.setText(noteListHolder.getNote());
    viewHolder.noteSource.setText(noteListHolder.getNoteSource());
    viewHolder.updatedDate.setText(noteListHolder.getLastUpdated());
    viewHolder.updatedBy.setText(noteListHolder.getLastUpdatedBy());

    return convertView;

以下是ListView xml布局:

<ListView
    android:id="@+id/android:list"
    style="@style/MyMaterialTheme.Base"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:divider="@android:color/black"
    android:dividerHeight="5dp"
    android:drawSelectorOnTop="true" >

我在应用程序中有五到六个类似的场景,都正常工作。唯一的区别是使用片段来包含列表。

希望有人有耐心读这篇文章,谢谢你的任何想法。

共有1个答案

呼延骏俊
2023-03-14

之前

if(convertView) {
...
}

您想扩大您的布局资源ID

LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(layoutResourceId, null, true);
...
return rowView;
 类似资料:
  • 我目前正在考虑应该使用PagerAdapter的哪个实现。我对他们俩都有两难的选择。让我给你看看这些是什么。 1#FragmentPagerAdapter 工作良好,当没有以前的实例可用时,它会创建片段的新实例,当有这样的机会时,它会检索以前的片段。 那不是很低效吗?我在Google I/O materials上看到Romain Guy说,创建新的效率不高,特别是当我们创建大量时,就像在中那样,因

  • 我最近将我的eclipse和ADT插件从v22.3更新到v22.6,并认识到一些重大变化。每当我创建一个新的Android应用程序项目时,都会出现一个新的appcompat_v7库,该库在v22.3插件上不存在,还有一个fragment_main.xml文件,据我所知,该文件旨在替换activity_main.xml文件。为什么?为什么activity_main.xml文件不再直接用于活动布局,以

  • 问题内容: 我正在升级Android应用程序(1.6兼容性),该应用程序使用显示三个带有嵌套活动的不同选项卡。 当时,我使用技巧在选项卡中显示嵌套的活动,但是我对此方法感到非常不满意,因为处理某些功能确实很麻烦。 我听说过1.6版的Fragments API兼容性软件包,并且看起来非常适合我想做的事情(在带有过渡效果和内容的选项卡中显示嵌套视图/功能),但我无法使其与(这是为了与一起使用,但在兼容

  • 问题内容: 关于它们有很多传说。我想知道真相。以下两个示例之间有什么区别? 问题答案: 不确定从何处获得传说,但: 提交按钮 与: IE6将在标记之间提交此按钮的所有文本,其他浏览器将仅提交值。使用可使您在按钮的设计上享有更大的布局自由度。从各种意图和目的看,它乍一看似乎很棒,但是各种浏览器怪癖使它有时很难使用。 在您的示例中,IE6将发送到服务器,而其他大多数浏览器将不发送任何内容。要使其跨浏览

  • 什么区别以及如何正确重写代码?

  • Web 应用可同时包括注解和 web.xml/web-fragment.xml 部署描述符。如果没有部署描述符,或有一个但其 metadata-complete 没有设置为true,web.xml、web-fragment 和注解如果在应用中使用则必须被处理。下表描述了是否处理注解和 web.xml 的 fragment。 TABLE 8-1 Annotations and web fragmen