Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中使用新数据刷新ListView_Java_Android - Fatal编程技术网

Java 在android中使用新数据刷新ListView

Java 在android中使用新数据刷新ListView,java,android,Java,Android,我正在尝试构建一个函数,当在listview中单击文件夹时,它将在同一活动中显示该文件夹中的文件列表。ie使用不同的数据刷新相同的listview。我在数据库中构建了一个类似目录的结构,并从数据库中获取文件和文件夹的列表 public class SkydriveFolderList extends Activity { ArrayList<String> filelist1=new ArrayList<String>(); ArrayList<St

我正在尝试构建一个函数,当在listview中单击文件夹时,它将在同一活动中显示该文件夹中的文件列表。ie使用不同的数据刷新相同的listview。我在数据库中构建了一个类似目录的结构,并从数据库中获取文件和文件夹的列表

public class SkydriveFolderList extends Activity
{
    ArrayList<String> filelist1=new ArrayList<String>();
    ArrayList<String> filepath=new ArrayList<String>();
    ArrayList<String> isfolder=new ArrayList<String>();
    ArrayList<Integer> fileid=new ArrayList<Integer>();

    ListView lv;
    EditText et;
    ArrayAdapter<SearchResults> arrayAdapter;
    Button back;
    TextView path;![enter image description here][1]

    public void onCreate(Bundle SkydriveFolderList)
    {
        Intent i = getIntent();
        filelist1 = i.getStringArrayListExtra("FileList");
        filepath = i.getStringArrayListExtra("FilePath");
        isfolder = i.getStringArrayListExtra("isFolder");
        fileid = i.getIntegerArrayListExtra("FileId");

        super.onCreate(SkydriveFolderList);
        ArrayList<SearchResults> searchResults = GetSearchResults();

        setContentView(R.layout.filelist);
        lv = (ListView)findViewById(R.id.skydrive_list);
        et=(EditText)findViewById(R.id.inputSearch);
        path=(TextView)findViewById(R.id.filepath);
        back=(Button)findViewById(R.id.back);

        arrayAdapter =new ArrayAdapter<SearchResults>(this,android.R.layout.simple_list_item_1,searchResults);
        // ((ListView) arrayAdapter).setAdapter();
        lv.setAdapter(new MyCustomBaseAdapter(this, searchResults)); 
        //lv.setAdapter(arrayAdapter);

    et.addTextChangedListener(new TextWatcher()
    {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3)
        {
            // When user changed the Text
            SkydriveFolderList.this.arrayAdapter.getFilter().filter(cs);
        }

        @Override
        public void afterTextChanged(Editable arg0)
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3)
        {
            // TODO Auto-generated method stub

        }


    });


    lv.setOnItemClickListener(new OnItemClickListener()

    {
        public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
        {

       Object o = parent.getItemAtPosition(position);
       SearchResults fullObject = (SearchResults)o;
      // prestationEco str=(prestationEco)o;//As you are using Default String Adapter
       Toast.makeText(getBaseContext(),fullObject.getFilename(),Toast.LENGTH_SHORT).show();
        }

        });


}
公共类SkydriveFolderList扩展活动
{
ArrayList filelist1=新的ArrayList();
ArrayList filepath=新的ArrayList();
ArrayList isfolder=新建ArrayList();
ArrayList fileid=新的ArrayList();
ListView lv;
编辑文本;
ArrayAdapter ArrayAdapter;
按钮返回;
text查看路径;![在此处输入图像描述][1]
创建时的公共void(捆绑SkyDrive文件夹列表)
{
Intent i=getIntent();
filelist1=i.getStringArrayListExtra(“文件列表”);
filepath=i.getStringArrayListExtra(“filepath”);
isfolder=i.getStringArrayListExtra(“isfolder”);
fileid=i.getIntegerArrayListExtra(“fileid”);
super.onCreate(SkydriveFolderList);
ArrayList searchResults=GetSearchResults();
setContentView(R.layout.filelist);
lv=(ListView)findViewById(R.id.skydrive\u列表);
et=(EditText)findViewById(R.id.inputSearch);
path=(TextView)findViewById(R.id.filepath);
后退=(按钮)findViewById(R.id.back);
arrayAdapter=新的arrayAdapter(这是android.R.layout.simple\u list\u item\u 1,searchResults);
//((ListView)arrayAdapter.setAdapter();
lv.setAdapter(新的MyCustomBaseAdapter(这是searchResults));
//低压设置适配器(阵列适配器);
et.addTextChangedListener(新的TextWatcher()
{
@凌驾
public void onTextChanged(字符序列cs、int arg1、int arg2、int arg3)
{
//当用户更改文本时
SkydriveFolderList.this.arrayAdapter.getFilter().filter(cs);
}
@凌驾
public void PostTextChanged(可编辑arg0)
{
//TODO自动生成的方法存根
}
@凌驾
更改前的公共void(字符序列arg0、int arg1、int arg2、int arg3)
{
//TODO自动生成的方法存根
}
});
lv.setOnItemClickListener(新的OnItemClickListener()
{
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
对象o=parent.getItemAtPosition(位置);
SearchResults fullObject=(SearchResults)o;
//prestationEco str=(prestationEco)o;//使用默认字符串适配器时
Toast.makeText(getBaseContext(),fullObject.getFilename(),Toast.LENGTH_SHORT).show();
}
});
}

请查看上面的链接以查看应用程序的快照


在这种情况下,当单击文档文件夹时,应使用该文件夹中的文件列表刷新listview。我该怎么做?

当用户单击列表视图而不是刷新整个listview时,您可以调用
适配器。notifyDataSetChanged()
这将刷新您的视图,不会出现任何延迟或崩溃……这将是一种更好的方法。希望这会有所帮助。

notifyDataSetChanged()通知附加的观察者基础数据已更改,反映数据集的任何视图都应刷新自身。在适配器上调用该方法如果整个数据都已更改,您可能必须使用其他数据集再次设置适配器。还有一件事,为什么要在数据库中存储信息?使用FileManager,您可以t从Android框架中删除所有必需的详细信息。在适配器中定义筛选器,并在筛选器中使用notifyDataSetChanged刷新内容。()我正在使用Skydrive API获取文件和文件夹的元数据,并将其存储在类似目录结构的数据库中。@Prannoy,您是否在适配器中定义了自定义筛选器?如果此答案有用,请向上投票。很高兴帮助您…:-)