نوشته شده توسط
Nevercom
خب شما اول باید ببینید کدوم قسمت از کدها بیشترین زمان رو به خودش اختصاص داده، خیلی ساده میتونی قبل از اجرای اون تکه کد زمان فعلی رو ذخیره کنی و بعد از اتمام اجرا زمان قبلی که ذخیره کردی رو از زمان فعلی کم کنی تا مدت زمان اجرا بدست بیاد.
بعد که فهمیدی کجا مشکل ایحاد کرده، اگر نتونستی مشکلش رو برطرف کنی کدهاش رو بزار تا شاید مشکلش پیدا بشه
والا اگه بگم کلافه شدم روی این قضیه دروغ نگفتم :
اینم کد آداپتر هست :
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import ir.rahgoshafan.diary.DiaryUpdateActivity;
import ir.rahgoshafan.diary.HistoryGalleryActivity;
import ir.rahgoshafan.diary.R;
import ir.rahgoshafan.diary.customs.DiaryTextView;
import ir.rahgoshafan.diary.database.DatabaseHelper;
import ir.rahgoshafan.diary.database.TableLocation;
import ir.rahgoshafan.diary.database.TableMoment;
import ir.rahgoshafan.diary.database.TablePeople;
import ir.rahgoshafan.diary.database.TablePhoto;
import ir.rahgoshafan.diary.model.Moment;
import static ir.rahgoshafan.diary.classes.ShowMassage.displayTo ast;
public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.HistoryHolder> implements Filterable {
private Context context;
private List<Moment> MOMENT_LIST;
private List<Moment> MOMENT_FILTER;
private TablePeople MOMENT_PEOPLE;
private TableLocation MOMENT_LOCATION;
private TablePhoto MOMENT_PHOTO;
private TableMoment TBL_MOMENT;
private int MOMENT_ID;
private String FARSI_DATE_TO_UPDATE;
private boolean isFilteredMode;
private String TXT_SEARCH;
private Handler handler = new Handler();
class HistoryHolder extends RecyclerView.ViewHolder {
private DiaryTextView TXT_TITLE, TXT_DATE, TXT_TIME, TXT_NOTE, TXT_LOCATION, TXT_PHOTO, TXT_PEOPLE, TXT_NULL_PHOTO;
private ImageView IMG_PHOTO, IMG_POPUP, IMG_LIKE;
private int ID;
HistoryHolder(View itemView) {
super(itemView);
TXT_TITLE = (DiaryTextView) itemView.findViewById(R.id.history_moment_title);
TXT_TIME = (DiaryTextView) itemView.findViewById(R.id.history_moment_time);
TXT_DATE = (DiaryTextView) itemView.findViewById(R.id.history_moment_persian_ date);
TXT_NOTE = (DiaryTextView) itemView.findViewById(R.id.history_moment_diary);
TXT_LOCATION = (DiaryTextView) itemView.findViewById(R.id.history_moment_location _no);
TXT_PHOTO = (DiaryTextView) itemView.findViewById(R.id.history_moment_photo_no );
TXT_PEOPLE = (DiaryTextView) itemView.findViewById(R.id.history_moment_people_n o);
IMG_PHOTO = (ImageView) itemView.findViewById(R.id.history_image_view);
IMG_POPUP = (ImageView) itemView.findViewById(R.id.history_popup);
TXT_NULL_PHOTO = (DiaryTextView) itemView.findViewById(R.id.history_txt_null_moment _photo);
IMG_LIKE = (ImageView) itemView.findViewById(R.id.history_moment_like);
}
}
public HistoryAdapter(Context context, List<Moment> MOMENT_LIST) {
this.context = context;
this.MOMENT_LIST = MOMENT_LIST;
this.MOMENT_FILTER = MOMENT_LIST;
}
@Override
public HistoryHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R .layout.history_card_view_items, parent, false);
DatabaseHelper DB_HELPER = new DatabaseHelper(context);
MOMENT_PEOPLE = new TablePeople(DB_HELPER);
MOMENT_LOCATION = new TableLocation(DB_HELPER);
MOMENT_PHOTO = new TablePhoto(DB_HELPER);
TBL_MOMENT = new TableMoment(DB_HELPER);
return new HistoryHolder(itemView);
}
@SuppressLint("RecyclerView")
@Override
public void onBindViewHolder(final HistoryHolder holder, final int position) {
handler.post(new Runnable() {
@Override
public void run() {
try {
Moment moment = MOMENT_LIST.get(position);
holder.ID = moment.getId();
holder.TXT_TITLE.setText(moment.getMomentTitle());
holder.TXT_TIME.setText(moment.getOnTime());
holder.TXT_DATE.setText(moment.getFarsiDate());
FARSI_DATE_TO_UPDATE = moment.getFarsiDate();
holder.TXT_NOTE.setText(moment.getMoment());
holder.TXT_LOCATION.setText(String.valueOf(MOMENT_ LOCATION.MOMENT_LOCATION_COUNT(holder.ID)));
holder.TXT_PEOPLE.setText(String.valueOf(MOMENT_PE OPLE.MOMENT_PEOPLE_COUNT(holder.ID)));
holder.TXT_PHOTO.setText(String.valueOf(MOMENT_PHO TO.MOMENT_PHOTO_COUNT(holder.ID)));
if (moment.isHeartLike()) {
holder.IMG_LIKE.setImageResource(R.drawable.heart_ on);
} else if (!moment.isHeartLike())
holder.IMG_LIKE.setImageResource(R.drawable.heart_ off);
holder.IMG_POPUP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MOMENT_ID = holder.ID;
showPopupMenu(holder.IMG_POPUP);
}
});
Cursor cursor = MOMENT_PHOTO.LAST_MOMENT_PHOTO(holder.ID);
if (cursor != null && cursor.moveToFirst()) {
for (int i = 0; cursor.getCount() > i; i++) {
Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(cursor.getString(0)));
holder.IMG_PHOTO.setImageBitmap(Bitmap.createScale dBitmap(bitmap, 240, 320, false));
cursor.moveToNext();
}
if (cursor.getCount() > 0)
holder.TXT_NULL_PHOTO.setVisibility(View.INVISIBLE );
cursor.close();
}
if (isFilteredMode) {
String text = moment.getMoment();
String htmlText = text.replace(TXT_SEARCH, "<font color='#F7941F'>" + TXT_SEARCH + "</font>");
//noinspection deprecation
holder.TXT_NOTE.setText(Html.fromHtml(htmlText));
}
} catch (Exception e) {
displayToast(context, "خطای آداپتر:" + "\n" + e.toString());
}
}
});
}
private void showPopupMenu(View view) {
PopupMenu popup = new PopupMenu(context, view);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.history_cardview_popup, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupItemClickListener());
popup.show();
}
private class PopupItemClickListener implements PopupMenu.OnMenuItemClickListener {
PopupItemClickListener() {
}
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.history_moment_update:
Intent intent = new Intent(context, DiaryUpdateActivity.class);
intent.putExtra("moment_id", MOMENT_ID);
intent.putExtra("moment_farsi_date", FARSI_DATE_TO_UPDATE);
context.startActivity(intent);
return true;
case R.id.history_moment_go_to_gallery:
Intent gallery_intent = new Intent(context, HistoryGalleryActivity.class);
gallery_intent.putExtra("moment_id", MOMENT_ID);
context.startActivity(gallery_intent);
return true;
case R.id.history_moment_delete:
boolean delete = TBL_MOMENT.DELETE_DIARY(MOMENT_ID);
if (delete) {
MOMENT_PEOPLE.DELETE_PEOPLE(MOMENT_ID);
MOMENT_PHOTO.DELETE_PHOTO(MOMENT_ID);
MOMENT_LOCATION.DELETE_LOCATION(MOMENT_ID);
displayToast(context, "حذف شد!");
}
return true;
case R.id.history_moment_location:
// Intent location_intent = new Intent(context, LocationGalleryActivity.class);
// location_intent.putExtra("moment_id", MOMENT_ID);
// context.startActivity(location_intent);
return true;
}
return false;
}
}
@Override
public int getItemCount() {
try {
return MOMENT_LIST.size();
} catch (Exception e) {
displayToast(context, "خطای آداپتر:" + "\n" + e.toString());
return 0;
}
}
private Filter filterResult = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
ArrayList<Moment> tempList = new ArrayList<>();
if (MOMENT_FILTER != null) {
if (TextUtils.isEmpty(constraint)) {
tempList = (ArrayList<Moment>) MOMENT_FILTER;
} else {
int length = MOMENT_LIST.size();
int i = 0;
while (i < length) {
Moment item = MOMENT_FILTER.get(i);
if (item.getMoment().contains(constraint))
tempList.add(item);
i++;
}
}
}
filterResults.values = tempList;
filterResults.count = tempList.size();
return filterResults;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
MOMENT_LIST = (ArrayList<Moment>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
isFilteredMode = true;
TXT_SEARCH = constraint.toString();
} else {
isFilteredMode = false;
}
}
};
@Override
public Filter getFilter() {
return filterResult;
}
}
دقیقا همین یه قسمت برنامه مونده فقط ... خطا و چیزی هم نداره فقط موقع لود به قول معروف هنگ میکنه تا لود تکمیل بشه