当列表视图为空时如何显示消息
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();
}
我正在做一个从 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();
}