Похоже, что RecyclerView фризит поток AsyncTask
Код Activity:
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.crazy_lab.pumpyourbrain1.achivements.AchievementsActivity;
import com.crazy_lab.pumpyourbrain1.db.Setting;
import com.crazy_lab.pumpyourbrain1.db.User;
import com.crazy_lab.pumpyourbrain1.db.service.SettingService;
import com.crazy_lab.pumpyourbrain1.db.service.UserService;
import com.r0adkll.slidr.Slidr;
import java.util.ArrayList;
import java.util.List;
public class PersonalAccount extends AppCompatActivity {
ImageView image_user;
Toolbar toolbar;
List<Account> accountList;
OnItemClickListener.OnItemClickCallback onItemClickCallback;
int reading;
int memory;
int attention;
int literacy;
int arithmetic;
TextView num_sections;
public static int currentItem = 0;
String space = " ";
int medal = R.drawable.medal;
String LOADING = "load";
ProgressBar pb;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_personal_account);
accountList = new ArrayList<>();
pb = (ProgressBar)findViewById(R.id.progressBar_loader);
image_user = (ImageView) findViewById(R.id.imageView5);
setImage();
toolbar = (Toolbar) findViewById(R.id.account_toolbar);
toolbar.setTitle(setName());
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setNavigationIcon(R.drawable.ic_home);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
Slidr.attach(this);
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
new LoadTask().execute();
Log.e(LOADING , "Runnable");
}},80);
}
public String setName() {
SettingService setting = new SettingService(getBaseContext());
List<Setting> set = setting.getAll();
Setting obj_name = set.get(0);
return obj_name.getName();
}
public void setImage() {
SettingService setting = new SettingService(getBaseContext());
List<Setting> set = setting.getAll();
Setting obj_photo = set.get(0);
String user_photo = obj_photo.getPhoto();
if (user_photo != null && !user_photo.equals("")) {
Uri image = Uri.parse(user_photo);
image_user.setImageURI(image);
} else {
image_user.setImageResource(R.drawable.crazzylab2);
}
}
public List<Account> setAccountList() {
UserService user = new UserService(getBaseContext());
List<User> set = user.getAll();
for (int i = 1; i <= 10; i++) {
int ma = set.get(i).getAch();
if (ma > 0 ) {
arithmetic++;
}
}
for (int i = 11; i <= 20; i++) {
int l = set.get(i).getAch();
if (l > 0) {
literacy++;
}
}
for (int i = 21; i <= 25; i++) {
int m = set.get(i).getAch();
if (m > 0) {
memory++;
}
}
for (int i = 26; i <= 30; i++) {
int sr = set.get(i).getAch();
if (sr > 0) {
reading++;
}
}
for (int i = 31; i <= 40; i++) {
int att = set.get(i).getAch();
if (att > 0) {
attention++;
}
}
if (reading > 0 ) {
if(reading == 10){
space = "";
}
accountList.add(new Account(getString(R.string.training_speed_reading), space + String.valueOf(reading),medal));
}
if (memory > 0 ) {
accountList.add(new Account(getString(R.string.training_memory), space + String.valueOf(memory),medal));
}
if (attention > 0 ) {
if(attention == 10){
space = "";
}
accountList.add(new Account(getString(R.string.training_attention), space + String.valueOf(attention),medal));
}
if (literacy > 0) {
if(literacy == 10){
space = "";
}
accountList.add(new Account(getString(R.string.training_literacy), space + String.valueOf(literacy),medal));
}
if (arithmetic > 0) {
if(arithmetic == 10){
space = "";
}
accountList.add(new Account(getString(R.string.training_mental_arithmetic), space + String.valueOf(arithmetic),medal));
}
Log.e(LOADING , "list loaded");
return accountList;
}
public void sectionsCount() {
if (accountList.size() > 0 ) {
if (accountList.size() == 1) {
num_sections.setText(" " + accountList.size() + " " + getString(R.string.account_section1));
}
if (accountList.size() % 2 == 0) {
num_sections.setText(" " + accountList.size() + " " + getString(R.string.accont_section2or4));
}
if (accountList.size() > 4) {
num_sections.setText(" " + accountList.size() + " " + getString(R.string.accont_sections));
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// h.removeCallbacks(r);
new LoadTask().cancel(true);
onBackPressed();
Log.e(LOADING , "arrow back pressed");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void onBackPressed() {
super.onBackPressed();
new LoadTask().cancel(true);
Log.e(LOADING , "BackPressed");
}
public OnItemClickListener.OnItemClickCallback setOnItemClickCallback(){
onItemClickCallback = new OnItemClickListener.OnItemClickCallback() {
@Override
public void onItemClicked(View view, int position) {
String section = accountList.get(position).getSection();
if (section.equals(getString(R.string.training_attention))) {
currentItem = 0;
} else if (section.equals(getString(R.string.training_literacy))) {
currentItem = 1;
} else if (section.equals(getString(R.string.training_memory))) {
currentItem = 2;
} else if (section.equals(getString(R.string.training_mental_arithmetic))) {
currentItem = 3;
} else if (section.equals(getString(R.string.training_speed_reading))) {
currentItem = 4;
}
Intent toAch = new Intent(PersonalAccount.this, AchievementsActivity.class);
startActivity(toAch);
}
};
return onItemClickCallback;
}public class LoadTask extends AsyncTask<Void,Void,Void>{
//private ProgressDialog pDialog;
RecyclerView rv;
LinearLayoutManager layoutManager;
AccountAdapter adapter;
@Override
protected void onPreExecute() {
pb.setVisibility(View.VISIBLE);
pb.setIndeterminate(true);
Toast.makeText(getApplicationContext(),"Start",Toast.LENGTH_SHORT).show();
super.onPreExecute();
/*pDialog = new ProgressDialog(PersonalAccount.this);
pDialog.setTitle("Please wait");
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pDialog.setMessage("Loading data...");
pDialog.setIndeterminate(true);
pDialog.setCancelable(false);
pDialog.setInverseBackgroundForced(true);
pDialog.show();*/
}
@Override
protected Void doInBackground(Void... voids) {
rv = (RecyclerView) findViewById(R.id.recycler_view);
num_sections = (TextView) findViewById(R.id.textView_num_sections);
layoutManager = new LinearLayoutManager(getApplicationContext());
adapter = new AccountAdapter(setAccountList(),setOnItemClickCallback());
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
rv.setHasFixedSize(true);
rv.setLayoutManager(layoutManager);
DividerItemDecoration mDividerItemDecoration = new DividerItemDecoration(rv.getContext(),
layoutManager.getOrientation());
rv.addItemDecoration(mDividerItemDecoration);
rv.setAdapter(adapter);
sectionsCount();
//pDialog.dismiss();
pb.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(),"Finish",Toast.LENGTH_SHORT).show();
}
}
}
Код xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/progressLayout"
android:background="@color/grey_background">
<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar_loader"
android:visibility = "invisible"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<include
layout="@layout/toolbar"
android:id="@+id/account_toolbar" />
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/scrollView2"
android:layout_below="@+id/account_toolbar"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/account_listView_margin">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView_num_sections"
android:layout_marginTop="@dimen/account_text_marginTop"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView_num_sections"
android:background="@color/colorWhite"
android:layout_marginTop="@dimen/account_listView_margin"
android:layout_marginRight="@dimen/account_listView_margin"
android:layout_marginLeft="@dimen/account_listView_margin" />
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="@dimen/account_image"
android:layout_height="@dimen/account_image"
android:id="@+id/imageView5"
android:background="@drawable/circular_hired"
android:layout_marginTop="9dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
</ScrollView>
</RelativeLayout>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть конструктор с параметрами, к примеру: конструктор(параметр1, параметр2); Хочу предотвратить получение в качестве аргумента к параметру2...
Зачем нужна коллекция Stack, она расширяет Vector, который и так уже медленный из-за синхронизацииА в чем прикладной смысл этого Stack?
Есть некое клиент-серверное десктопное приложение, отправлять запросы и получать их оно будет только тогда, когда запущено, а следственно,...