我正在研究一个从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;
}
答案 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();
}