在recyclerview中加载大数据需要很长时间

时间:2017-01-31 06:46:34

标签: android-recyclerview text-files recycler-adapter

  

我有11个文本文件,每个文件包含50-60行。我已阅读所有文件并在recyclerview中显示。我使用asynctask来跟踪进度条的进度。我也使用日志来查看读取行。我发现阅读时间很短,但阅读后,在recyclerview中显示数据需要5-6秒。这是为什么会造成的?我该怎么做才能解决这个问题?如果有数千个文本文件,我为什么要这样做?

     

代码读取文件和绑定

      AsyncTask<Void,Void,Void> task = new AsyncTask<Void, Void, Void>() {


        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            progressDialog = ProgressDialog.show(GrammerDetails.this,
                    "Loading", "Please Wait for a while");
        }

        @Override
        protected Void doInBackground(Void... voids) {

                getFromFilesbagdhara(id,realm);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putBoolean("first_bagdhara",false);
                editor.apply();

            return null;
        }



        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            inflateData(listGrammerItem);
            progressDialog.dismiss();

        }
    }.execute();


 private void getFromFilesbagdhara(String id, Realm realm) {

    String directory = "Grammer/Bagdhara";



    AssetManager man = getAssets();
    BufferedReader reader = null;
    try {
        String[] files = man.list(directory);

        for (int i =0;i<files.length;i++){
            String fileName = files[i];

            reader = new BufferedReader(
                    new InputStreamReader(getAssets().open(directory+"/" + fileName),
                            "UTF-8"));

            String line;

            Log.e("File",files[i]);

            while ((line = reader.readLine()) != null) {

                Log.e("line",line);
             //   String[] text = line.split(" ");
                String a = line.substring(0,line.indexOf("(")-1);
                String b = line.substring(line.indexOf("(")+1,line.indexOf(")"));
                String wordOne = a;
              //  String dummyTwo = text[1];
                String wordTwo = b; //dummyTwo.substring(1,dummyTwo.length()-1);

                final ClassGrammerItem classGrammerItem = new ClassGrammerItem(wordOne,wordTwo,id);

                listGrammerItem.add(classGrammerItem);

            }


        }

    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                //log the exception
            }
        }
    }
}


 private void inflateData(RealmList<ClassGrammerItem> listGrammerItem) {

    AdapterGrammerItem adapter = new AdapterGrammerItem(listGrammerItem, GrammerDetails.this);
    recyclerView.setAdapter(adapter);

}
  

适配器:

public class AdapterGrammerItem extends RecyclerView.Adapter<AdapterGrammerItem
    .ViewHolderAdapterRecycler>  {

RealmList<ClassGrammerItem> activityList = new RealmList<ClassGrammerItem>();
Context context;
private LayoutInflater layoutInflater;

public AdapterGrammerItem(RealmList<ClassGrammerItem> activityList, Context context) {
    this.activityList = activityList;
    this.context = context;
    layoutInflater = LayoutInflater.from(context);
}


@Override
public AdapterGrammerItem.ViewHolderAdapterRecycler onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = layoutInflater.inflate(R.layout.recycler_grammer_item, parent, false);
    AdapterGrammerItem.ViewHolderAdapterRecycler viewHolder = new AdapterGrammerItem.ViewHolderAdapterRecycler(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(AdapterGrammerItem.ViewHolderAdapterRecycler holder, int position) {

    ClassGrammerItem currentItem = activityList.get(position);
    holder.wordOne.setText(currentItem.getWordOne());
    holder.wordTwo.setText(currentItem.getWordTwo());

}



@Override
public int getItemCount() {
    return activityList.size();
}

public class ViewHolderAdapterRecycler extends RecyclerView.ViewHolder {


    MyTextView wordOne, wordTwo;

    public ViewHolderAdapterRecycler(View itemView) {
        super(itemView);

        wordOne = (MyTextView) itemView.findViewById(R.id.wordOne);
        wordTwo = (MyTextView) itemView.findViewById(R.id.wordTwo);

    }
 }
}

0 个答案:

没有答案