我想开发一个应用程序来显示带有列表的第三方应用程序的捕获数据,并在选择列表中的文件项时执行进一步操作。我不知道为什么setListAdapter
不起作用,我尝试更改扩展ListActivity
,但它导致我的应用程序崩溃是我的代码:
package com.example.long123.testlistfile;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.nfc.Tag;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class listfile extends ListActivity {
/*ArrayList<String> files = new ArrayList<String>();*/
private List<String> mainListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listfile);
mainListView = (List<String>) findViewById(R.id.mainListView);
Button btnRefresh = (Button) findViewById(R.id.btnRefresh);
}
public void btnRefresh(View v){
File mfile=new File("/storage/emulated/0/Android/data/jp.co.taosoftware.android.packetcapture/files");
File[] list=mfile.listFiles();
mainListView = new ArrayList<String>();
for( int i=0; i< list.length; i++) {
mainListView.add(list[i].getName());
}
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mainListView));
/* File[] rootFiles = File.listRoots();
File storage = Environment.getExternalStorageDirectory();
for(int i = 0; i <rootFiles.length; i++){
File[] directory = rootFiles[i].listFiles();
for (int j = 0; j< directory.length; j++){
files.add(directory[j].getAbsolutePath());
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(listfile.this,
android.R.layout.simple_expandable_list_item_1, files);
mainListView.setAdapter(adapter);*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_listfile, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
答案 0 :(得分:0)
这行代码似乎错了:
mainListView = (List<String>) findViewById(R.id.mainListView);
首先我可以看到:List<String>
不是一个视图。因此,应用程序可能会因铸造类型错误而崩溃。
这里应该是通常的ListView作为类型 - 在findViewById的结果中像这样:
ListView myListView = (ListView) findViewById(R.id.mainListView);
当你想扩展ListActivity时,你应该在你的xml布局文件中使用这种id声明。
android:id="@android:id/list"
您将获得ListView作为
ListView listview = this.getListView();
可以找到详细信息here。