PDA

View Full Version : کنسل نشدن انیمیشن با اسکرول



hamedjj
پنج شنبه 01 خرداد 1393, 04:30 صبح
سلام
من برای progressBar خودم در دانلود فایل ها از animationDrawable استفاده میکنم
در تابع getview خوب پیاده سازی کردم و با کلیک روی دکمه دانلود انیمیشن حرکت میکنه و با اتمام دانلود می ایسته.

اما اگر در حین حرکت انیمیشن اسکرول کنی انیمشن خود به خود می ایسته در حالی که دانلود هنوز ادامه داره.

برای این مشکل باید چیکار کرد
چیزی مثل setCancelable در دیالاگ برای این وجود نداره که خود به خود کنسل نشه؟؟

http://www.axgig.com/images/39297660841936639268.gif

hamedjj
پنج شنبه 01 خرداد 1393, 20:14 عصر
کسی آمار اینو نداره
از خود progressBar هم استفاده کنم همین مشکل را داره یا نه

#root#
پنج شنبه 01 خرداد 1393, 21:39 عصر
باز با cursorAdapter ی؟ :متفکر:

عجب سوالی cursorAdapter متد getView نداره :بامزه:

لیست رو با چی پر میکنی؟

اصلا این getView رو بزار ببینیمش.

hamedjj
پنج شنبه 01 خرداد 1393, 21:57 عصر
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_S ERVICE);
View rootview = inflater.inflate(R.layout.item, parent, false);

mgr = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE) ;
context.registerReceiver(onComplete,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPL ETE));
context.registerReceiver(onNotificationClick,new IntentFilter(DownloadManager.ACTION_NOTIFICATION_C LICKED));
mp = new MediaPlayer();

TextView tv1 = (TextView)rootview.findViewById(R.id.txt_name);
TextView tv2 = (TextView)rootview.findViewById(R.id.txt_numer);
ImageView img = (ImageView) rootview.findViewById(R.id.imageView1);
final ImageView anim = (ImageView) rootview.findViewById(R.id.imageView2);

CheckBox repeatChkBx = (CheckBox) rootview.findViewById(R.id.favorite_check);
TextView id = (TextView)rootview.findViewById(R.id.id);


Cursor cur = database();
if (cur != null) {
cur.moveToPosition(position);}

id.setText(String.valueOf(cur.getString(cur.getCol umnIndex("like"))));
id.setVisibility(View.GONE);

String me = cur.getString(cur.getColumnIndex("like"));
if (me.equals("yes")) {
repeatChkBx.setChecked(true);
}

tv1.setText(cur.getString(cur.getColumnIndex("name")));
tv2.setText(cur.getString(cur.getColumnIndex("category")));


img.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Cursor cur = database();
cur.moveToPosition(position);
name = "hamed"+cur.getString(cur.getColumnIndex("id"))+".mp3";
File f1 = new File(Environment.getExternalStorageDirectory() +"/Download/"+name);
if (f1.exists()){
start(name);
}else {
AnimationDrawable animation = (AnimationDrawable) anim.getDrawable();
animation.start();
Download(position);
}
}
});

repeatChkBx.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
CheckBox chk = (CheckBox) v.findViewById(R.id.favorite_check);
MyDatabase MyDatabase = new MyDatabase(context);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();

if (chk.isChecked()) {
ContentValues cv = new ContentValues();
cv.put("like", "yes");
mydb.update("list", cv, "id ="+ values[position], null);
}else {
ContentValues cv = new ContentValues();
cv.put("like", "no");
mydb.update("list", cv, "id ="+ values[position], null);
}
}
});

return rootview;
}


public Cursor database() {
MyDatabase MyDatabase = new MyDatabase(context);
SQLiteDatabase mydb = MyDatabase.getReadableDatabase();
Cursor cur = mydb.rawQuery("SELECT id,name,category,like,url FROM list ", null);
return cur;
}

protected void Download(int position) {
Cursor cur = database();
cur.moveToPosition(position);

name = "hamed"+cur.getString(cur.getColumnIndex("id"))+".mp3";
Uri uri=Uri.parse(cur.getString(cur.getColumnIndex("url")));
lastDownload=mgr.enqueue(new DownloadManager.Request(uri)
.setAllowedNetworkTypes(DownloadManager.Request.NE TWORK_WIFI |
DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false)
.setTitle(cur.getString(cur.getColumnIndex("name")))
.setDescription("لطفا منتظر بمانید ...")
.setDestinationInExternalPublicDir("/Download/",name));

}

/////////////////////////// نمایش پیغامهای وضعیت دانلود
private CharSequence statusMessage(Cursor c) {
// TODO Auto-generated method stub
String msg="???";
switch(c.getInt(c.getColumnIndex(DownloadManager.C OLUMN_STATUS))) {
case DownloadManager.STATUS_FAILED:
msg="خطا در دانلود!";
break;
case DownloadManager.STATUS_PAUSED:
msg="توقف دانلود!";
break;
case DownloadManager.STATUS_PENDING:
msg="آماده شدن برای دانلود";
break;
case DownloadManager.STATUS_RUNNING:
msg="در حال بارگیری";
break;
case DownloadManager.STATUS_SUCCESSFUL:
msg="دانلود کامل شد";
break;
default:
msg="دانلودی به چشم نمیخورد";
break;
}
return(msg);
}
///////////////////////////////وقتی دانلود کامل شد این تابع اجرا میشود
BroadcastReceiver onComplete=new BroadcastReceiver() {
public void onReceive(Context ctxt, Intent intent) {
Toast.makeText(getContext(), "دانلود کامل شد", Toast.LENGTH_SHORT).show();
animation.stop();
}
};
////////////////////////////// وقتی نوار دانلود در نوتیفیکیشن را لمس کنیم
BroadcastReceiver onNotificationClick=new BroadcastReceiver() {
public void onReceive(Context ctxt, Intent intent) {
display();
}

private CharSequence display() {
// TODO Auto-generated method stub
Cursor c=mgr.query(new DownloadManager.Query().setFilterById(lastDownload ));
if (c==null) {
Toast.makeText(getContext(), "فایلی یافت نشد", Toast.LENGTH_SHORT).show();
}
else {
c.moveToFirst();
Toast.makeText(getContext(), statusMessage(c), Toast.LENGTH_SHORT).show();
}

return null;
}
};

protected void start(String name2) {
// TODO Auto-generated method stub
try {
mp.reset();
String mp3Uri = Environment.getExternalStorageDirectory()+ "/Download/"+name2;
mp.setDataSource(mp3Uri);
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

hamedjj
پنج شنبه 01 خرداد 1393, 21:59 عصر
در این قسمت انیمیشن استارت میشه

if (f1.exists()){
start(name);
}else {
AnimationDrawable animation = (AnimationDrawable) anim.getDrawable();
animation.start();
Download(position);
}



در این قسمت پس از اتمام دانلود stop میشه:


///////////////////////////////وقتی دانلود کامل شد این تابع اجرا میشود
BroadcastReceiver onComplete=new BroadcastReceiver() {
public void onReceive(Context ctxt, Intent intent) {
Toast.makeText(getContext(), "دانلود کامل شد", Toast.LENGTH_SHORT).show();
animation.stop();
}
};


بدبختی اینه تو stackoverflow هم دوبار این سوال را پرسیدم کسی جواب نداد :عصبانی++:

#root#
پنج شنبه 01 خرداد 1393, 22:18 عصر
شما که استادی خودتون ، این نکته رو باید رعایت کنی ،
هر جا دیدم شیوه پیاده سازی listView به این (http://www.ezzylearning.com/tutorial.aspx?tid=1763429) صورت بوده یعنی از کلاس ViewHolder استفاده میشه (شیوه بهنیش اینه یعنی) ، علاوه بر این شما بیا یه کلاس بساز مثلا این :
public class Book {

private String name;
private int id;

// wirte getters and setters here

}
بعد یه ArrayList از این کلاس بساز و اطلاعات هر شی رو از دیتابیس یا جای دیگه بهش بده ، من خودم این طوری کار میکنم ، وقتی هم اطلاعت یه شی رو میخوام تغییر بدم علاوه به اون شی میرم اطلاعات منبع اصلی (مثلا دیتابیس) رو هم همون لحظه تغییر میدم.