ListView没有正确显示项目

时间:2015-12-19 16:11:02

标签: android android-listview android-adapter

我正在创建一个应用程序来从phone中获取txt文件的名称。我将所有数据提取到一个arraylist并将其添加到适配器。但问题是listview没有正确显示项目。首先,只有第一个项目出现,当我向上和向下滚动时,会出现更多项目。虽然我在行项目中添加了一个静态图像并且显示正确,但即便如此我能够在listview上的toast消息中获取名称当时不可见的项目的文件名。我发布我的代码检查它并告诉我的错误

public class MainActivity extends AppCompatActivity {
private File sdcardObj=new File(Environment.getExternalStorageDirectory().getAbsolutePath());
private ArrayList<String> filelist=new ArrayList<String>();
private ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    list= (ListView) findViewById(R.id.listfiles);
    LongOperation longOperation=new LongOperation();
    longOperation.execute();

}
private class LongOperation extends AsyncTask<String, Void, String> {
    ProgressDialog progressDialog;
    @Override
    protected String doInBackground(String... params) {
        listFiles(sdcardObj,filelist);
        return "Executed";
    }

    @Override
    protected void onPostExecute(String result) {
        progressDialog.dismiss();
        MyListAdapater myListAdapater=new MyListAdapater(MainActivity.this,filelist);
        list.setAdapter(myListAdapater);


    }

    @Override
    protected void onPreExecute() {
      progressDialog=new ProgressDialog(MainActivity.this);
        progressDialog.setMessage("Please Wait.Loading files list");
        progressDialog.setCancelable(false);

        progressDialog.show();
    }

    @Override
    protected void onProgressUpdate(Void... values) {}
}
private void listFiles(File sdcard,ArrayList<String> filelist) {
    if(sdcard.isDirectory()){
        File[] files = sdcard.listFiles();

        try {
            for (File f : files){
                if(!f.isDirectory()) {
                    if(f.getName().endsWith(".txt")|| f.getName().endsWith(".docx")||f.getName().endsWith(".rtf")) {
                        // Log.d(" FILES",f.getName());
                        this.filelist.add(f.getAbsolutePath());

                    }
                }
                else {
                    this.listFiles(f,this.filelist);
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
        }
    }
}
static class ViewHolder{
    public TextView cardId;

}

class MyListAdapater extends BaseAdapter {
    ArrayList<String>files=new ArrayList<>();
    LayoutInflater inflater ; Context context;
    public MyListAdapater(Context context,ArrayList<String> cardListForDisplay) {
        super();

        this.files = cardListForDisplay;
        this.context=context;

    }



    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return files.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }



    @Override
    public View getView(int arg0, View view, ViewGroup parent) {
        View rowView = view;
        ViewHolder holder;
        if(rowView==null){
            holder=new ViewHolder();
            inflater = ((MainActivity) context).getLayoutInflater();
            rowView = inflater.inflate(R.layout.list_item, parent, false);
            holder.cardId=(TextView)rowView.findViewById(R.id.tv_name);
            rowView.setTag(holder);
         //   /storage/emulated/0/Android/data/com.gameloft.android.ANMP.GloftFWHM/files/d_o_w_n_l_o_a_d_e_d.txt
        }
        else{
            holder=(ViewHolder) rowView.getTag();
            String name=files.get(arg0).substring(files.get(arg0).lastIndexOf("/")+1,files.get(arg0).length());
            holder.cardId.setText(name);
            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Toast.makeText(MainActivity.this,files.get(position), Toast.LENGTH_LONG).show();
                }
            });
        }
        return rowView;
    }
}
}

0 个答案:

没有答案