当列表视图为空时如何显示消息

How i can display a message when listview is empty

我正在做一个从 SD 卡中获取文件的项目。所有提取都可以正常工作,但是一旦我想添加一个条件时就会出现问题,如果 listview 为空,则程序应显示 ** There is nothing to view **。 但是我不知道该怎么做。

code example:

 ListView lv;
    ArrayList<String> FilesInFolder = GetFiles( Environment.getExternalStorageDirectory() +"/" + "foldername"+"/"+"file.txt");
    lv = (ListView)findViewById(R.id.lit_view);
        lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, FilesInFolder));

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            Intent intent = new Intent(getApplicationContext(), pdfviewer.class);
            intent.putExtra("FileName", (String)parent.getItemAtPosition(position));
            startActivity(intent);
            finish();
                       }
    });
}
public ArrayList<String> GetFiles(String DirectoryPath) {
    ArrayList<String> MyFiles = new ArrayList<String>();
    File f = new File(DirectoryPath);

    f.mkdirs();
    File[] files = f.listFiles();
    if (files.length == 0)
        return null;
    else {
        for (int i=0; i<files.length; i++)
            MyFiles.add(files[i].getName());
    }

    return MyFiles;
}
        ListView lv;
        ArrayList < String > FilesInFolder = GetFiles(Environment.getExternalStorageDirectory() + "/" + "foldername" + "/" + "file.txt");
        lv = (ListView) findViewById(R.id.lit_view);


        // This will do the needful 

        if (FilesInFolder == null || FilesInFolder.isEmpty()) {
            lv.setVisibility(View.GONE)
            Toast.makeText(this, "Their is nothing to view", Toast.LENGTH_SHORT).show()
            // Add another textView in xml and make it visible
        } else
            lv.setAdapter(new ArrayAdapter < String > (this,
                android.R.layout.simple_list_item_1, FilesInFolder));
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView << ? > parent, View v, int position, long id) {

                Intent intent = new Intent(getApplicationContext(), pdfviewer.class);
                intent.putExtra("FileName", (String) parent.getItemAtPosition(position));
                startActivity(intent);
                finish();
            }
        });
    }

据我了解你的问题,我可以这样建议。您应该在 activity.xml 中添加 EmptyView,您可以根据需要添加 ImageView 或 TextView。添加一个检查是否没有要添加的文件的方法。然后将 EmptyView 设置为您的 ListView。

if (noFiles) {        
        ListView exempleListView = (ListView) findViewById(R.id.list);
        // Find and set empty view on the ListView, so that it only shows when the list has 0 items.
        View emptyView = findViewById(R.id.empty_view);
        petListView.setEmptyView(emptyView); 
}

在你有列表视图的 xml 文件中,你可以添加一个带有文本 "there is nothing to view" 或 "press + to add record" 的文本视图,并将其置于父级

的中心
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/emptyMessage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="press + to add record" />
</RelativeLayout>

完成此操作后,下一步就是在列表为空时显示和隐藏此文本视图,在您的情况下,您使用的是 ArrayList,因此您可以这样做

findViewById(R.id.emptyMessage).setVisibility(FilesInFolder.size() == 0 ? View.VISIBLE : View.INVISIBLE);

incase 这个语句让你感到困惑,这个语句是一个布尔检查 / 或者你可以说它是一种在单行中写 if/else 的方式 所以当你完成你的列表时你需要调用这个语句,在你的情况下我相信这个语句应该在列表视图创建之后出现,希望它是你想要的

声明一个您希望在列表为空时显示的空视图:

TextView emptyView;

在创建时:

emptyView = findViewById(R.id.emptyview);

获取列表视图的位置,在这种情况下您可以显示替代视图:

if (List.get(pos).getListPosition() == null) {
                        primaryView.setVisibility(View.GONE);
                        emptyView.setVisibility(View.VISIBLE);
                    } else {
                        emptyView.setVisibility(View.GONE);
                        primaryView.setVisibility(View.VISIBLE);
                        primaryView.setAdapter(pAdapter);
                        adapter.notifyDataSetChanged();
                    }