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

时间:2018-08-05 12:40:46

标签: android android-listview

我正在研究一个从SD卡提取文件的项目。所有提取都能正常工作,但是一旦我想添加一个条件,即如果listview为空,则程序应显示**没有任何内容**,就会出现问题。 但是我不知道该怎么办。

  

代码示例:

 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;
}

4 个答案:

答案 0 :(得分:1)

在具有列表视图的xml文件中,您可以添加文本视图,其中包含文本“没有内容可查看”或“按+添加记录”并将其居中显示在父级中

<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>

完成后,接下来的工作就是在列表为空时显示和隐藏此textview,如果您使用的是ArrayList,则可以这样做

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

如果此语句使您感到困惑,则此语句是布尔检查/或您可以说这是在单行中编写if / else的一种方式 因此,在完成列表定稿后,您需要调用此语句,以您为例,我认为该语句应该在创建列表视图之后出现,希望它是您想要的

答案 1 :(得分:0)

        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();
            }
        });
    }

答案 2 :(得分:0)

据我了解您的问题,我可以为您提供一些建议。您应该在您的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); 
}

答案 3 :(得分:0)

声明要在列表为空时显示的空视图:

TextView emptyView;

在OnCreate上:

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();
                    }