当前位置: 首页 > 面试题库 >

如何将setEmptyView()与ListFragment中的自定义列表布局一起使用

郎宣
2023-03-14
问题内容

我正在用几个打标机Fragments

当列表(Fragment)中没有条目时,我想显示一条消息

我尝试使用Textviewwith,android:id="@id/android:empty但是它不起作用。

自定义列表布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/padding_medium" >

    <TextView
        android:id="@+id/label_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="@dimen/padding_medium"
        android:text="@string/label_value"
        android:textColor="@android:color/white"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/label_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="@dimen/padding_medium"
        android:text="@string/title_time"
        android:textColor="@android:color/white"
        android:textSize="16sp" />

</RelativeLayout>

列表适配器类:

public class JournalAdapter extends ArrayAdapter<String> {

    private final Context context;
    private final List<String> values;
    private final List<String> dates;

    public JournalAdapter(Context context, List<String> values,
            List<String> dates) {
        super(context, R.layout.layout_journal_list, values);

        this.context = context;
        this.values = values;
        this.dates = dates;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.layout_journal_list, parent, false);

        TextView value = (TextView) rowView.findViewById(R.id.label_glucose);
        TextView date = (TextView) rowView.findViewById(R.id.label_date);

        value.setText(values.get(position));
        date.setText(dates.get(position));

        return rowView;
    }

}

列表解析方法:

private void initListView() {
        values = dataSource.getAllValues();

        List<String> values = new ArrayList<String>();
        List<String> dates = new ArrayList<String>();

        for (Value value : values) {
            values.add(Double.toString(value.getValue()));
            dates.add(secondsToDate(value.getDate()));
        }

        setListAdapter(new JournalAdapter(context, values, dates));

        listView = getListView();
        listView.setEmptyView(noItems("NO ITEMS"));
        listView.setOnItemClickListener(this);
    }

noItems 方法:

private TextView noItems(String text) {
        TextView emptyView = new TextView(context);
        emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT));
        emptyView.setText(text);
        emptyView.setTextColor(Color.WHITE);
        emptyView.setTextSize(20);
        emptyView.setVisibility(View.GONE);
        emptyView.setGravity(Gravity.CENTER_VERTICAL
                | Gravity.CENTER_HORIZONTAL);

        return emptyView;
    }

问题答案:

这对我有用(从WilliamRemacle提出的问题中得到了解决方案)。您可能会错过的是 将创建的 对象 添加
布局父对象 (下面方法底部的第二行代码): TextView``ListViewnoItems

在我中,ListFragment我使用以下方法为空视图获取视图:

private TextView noItems(String text) {
    TextView emptyView = new TextView(getActivity());
    //Make sure you import android.widget.LinearLayout.LayoutParams;
    emptyView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));
    //Instead of passing resource id here I passed resolved color 
    //That is, getResources().getColor((R.color.gray_dark))
    emptyView.setTextColor(getResources().getColor(R.color.gray_dark));
    emptyView.setText(text);
    emptyView.setTextSize(12);
    emptyView.setVisibility(View.GONE);
    emptyView.setGravity(Gravity.CENTER_VERTICAL
            | Gravity.CENTER_HORIZONTAL);

    //Add the view to the list view. This might be what you are missing
    ((ViewGroup) getListView().getParent()).addView(emptyView);

    return emptyView;
}

然后在的onStart()方法中ListFragment设置空视图:

@Override
public void onStart() {
    super.onStart();
    getListView().setEmptyView(
            noItems(getResources().getString(R.string.widget_empty)));
}


 类似资料:
  • 我正在尝试理解如何使用listfragments和自定义适配器。所以我创建了这个小示例,我想知道在哪里可以将listview的分隔符设置为NULL。

  • 问题内容: 我知道Android 很棒。它使我们能够播放本地文件以及媒体流。而且非常容易使用(例如): 通过调用具有不同参数集的重载,可以设置不同类型的DataSource 。这个函数有一个有趣的原型: 看起来可以用自己的实现完全覆盖。它确实有效: 并在主要代码中: 是的,这很好。但是,如果我尝试音频/ aacp广播流(例如:“ http://111.223.51.8:8005”-它是“ COOL

  • 问题内容: 我只是开始看一下Mattt出色的新Alamofire快速联网库,并且不确定如何将其与自定义标头一起使用。 我正在尝试从AFNetworking转换为Alamofire的代码是这样的: 问题答案: 根据官方文档,不建议修改会话配置: 不建议将其用于Authorization或Content- Type标头。而是分别使用URLRequestConvertible和ParameterEnco

  • 我正在将我的Spring应用程序从Spring-boot 1.5.9迁移到Spring-boot 2.0.0。使用这个新的Spring包,我在Redis中缓存数据时遇到了一些问题。 在我的配置中,我有3个具有不同TTL(长、中、短)的CacheManager: 我还有一个自定义RestTemplate: 在上一个Spring版本中,缓存的每个数据都使用这个RestTemplate,并使用Gener

  • 问题内容: 我有一个布尔时间序列,我想用它来确定绘图中应加阴影的部分。 目前我有: 其中, r_min 和 r_max 只是y轴的最小值和最大值。 但是fill_between不会一直填充到图的顶部和底部,因为,因此我想改用 axvspan() 。 给定axvspan仅采用坐标,有什么简单的方法可以做到这一点?因此,我能想到的唯一方法是将所有彼此相邻且均为True的日期分组,然后将这些日期的第一个

  • 问题内容: 我还没有找到一种方法来做到这一点。可能吗? 问题答案: 好吧,我无法弄清楚如何使用可用的类,因此我自己扩展了它,现在它对我有用。这是我所做的: