آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده از Intent و Extras

rad  7 سال پیش  7 سال پیش
0 0

باسلام

من یک دونه لیست ویو دارم که اطلاعات را از دیتابیس میخونه و نشون میده

حالا من قابلیت جستجو قرار دادم و در صورتی که کاربر جتسجو کنه نتایجش توی لیست ویو نشون داده میشه

تا اینجا هر دو مورد به درستی کار میکنند

ولی وقتی روی هرکدوم از عناصر نتایج جتسجو کلیک میکنم

   int position = extras.getInt("POSITION"); 

مربوط به لیست اولی که از دیتابیس خونده و با

            intent.putExtra("POSITION", position); 

مقدار دهی شده میخونه نتایج من توی لیست ویو درست نشون میده حال به لیست ویو چطوری بفهمونم این آیتمی که روت کیلک میشه نتیجه جستجو هست و ایندکس مربوطش رو وقتی کاربر روش کلیک میکنه که مربوط به جزئیاتش هست نشود داده بشه؟

اگه جاییش واضح نیست بگید توضیح بدم

+2 0
میخوام جوابتو بدم ولی نفهمیدم چی گفتی والا. (7 سال پیش)
+1 0
هههه مسعود جالب بود راستی منم منظورتو نفهمیدم (7 سال پیش)
0 0
؟ کجاشو متوجه نشدید خیلی واضح هست که؟نیست! (7 سال پیش)
0 0
دوستان یکم سریع تر (7 سال پیش)
+2 0
خوب غیر از position باید یه مقدار دیگه که نیاز دارید در آرایه لیستتون قرار بدید و اونو به هنگام کیلیک به اکتیویتی دوم پاس بدید . (7 سال پیش)
0 0
خب همین رو نمیدونم چطوریه ببینید من نتایج چستجو را درست نمایش میدم توی لیست ویو ولی وقتی روی هرکدوم کلیک میشه position مربوط به قبلی رو میفرسته درنتیجه وقتی روی نتیجه جستجو که درست نمایش میده کلیک میشه جزئیات مربوط به Show all نمایش میده حالا هر چی که بوده من فقط گیرم توی Intent هست توی Intent ما برای اکتیوتی داریم PutExtras میکنیم در صورتی که اینجا ما اکتیوتی نداریم اینا position نشون رو از public class AdapterNote extends ArrayAdapter میگیرند (7 سال پیش)
+2 0
اگه بعنوان مثال روی pos 1 کیلیک بشه و در اکتیویتی از آرایه مربوط به نام ها نام یکم خونده بشه و نمایش داده بشه , میتونید در ادپتر نام رو پوت اکسترا کنید و یه سرچی تو آرایه نام ها بزنید که پوزیشن رو بدست بیارید . (7 سال پیش)
0 0
این راه هم به ذهن خودم رسیده ولی گفتم شاید بشه pos رو مثل اول مقدار دهی کرد شدن میشه فقط باید به لیست ویو بگی position کی الان داری میدی برای نتایج جستجو هست و ربطی به Show all نداره .درضمن باید صحیح کنم که راه شما اشتباه هست چون Show all یک تعدادی position داره و نتایج جستجو بیشتر یا کمتر باشه با خطا index مواجه میشه (7 سال پیش)
0 0
درست شد (7 سال پیش)
+2 0
دوست عزیز آقای rad@ دوستان برای جواب دادن به سوال شما وقت گذاشتن حداقل کاری که شما میتونید انجام بدید لایک کردن نظرات دوستان هست حتی اگه نظراتشون کمکی به شما نکرده باشه . اگه به همین منوال ادامه بدیم دیگه کسی تمایل به پاسخ دادن به سوالاتمون نمیکنه . موفق باشی (7 سال پیش)
+1 0
دوست عزیز @FSR شما فرمودید حتی اگه نظراتشون کمکی به شما نکرده باشه خب سوال بنده رو فقط @admirallam جدی گرفتن و نظری فرمودند که درست نبود (7 سال پیش)
+2 0
همین که کسی بیاد اینجا از وقتش بزنه نظر بده ارزش لایک رو داره به نظر من. (7 سال پیش)
+1 0
باشه یک لایک میزنم (7 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
rad  7 سال پیش
0 0


if (extras.containsKey("POSITION") & !extras.containsKey("Search")) {
int position = extras.getInt("POSITION");
file = G.filesSqlite.get(position);
Log.i(G.LOG_TAG, "file : "+ G.filesSqlite.get(position));
}
if (extras.containsKey("Search")) {
int Search = extras.getInt("Search");
Log.i(G.LOG_TAG, "Search : "+Search);
file = G.filesSqliteSearch.get(Search);

}
+2 0
سلام.توی همچین مواردی نباید از position استفاده کرد.چون داده ها، توی دیتابیس ذخیره شدن بهتره از id استفاده کنید(البته به شرطی که این id منحصربفرد باشه).وقتی از position استفاده میشه،مهم نیست لیست شما نتایج جستجو رو نشون بده یا همه آیتم ها رو، به هر حال position همیشه ثابته و از صفر شروع میشه و این یعنی اینکه اگه شما آیتم هایی رو که حاصل از یک جستجو هست رو توی همون لیست ویو نشون بدین عملا اولین نتیجه جستجو position صفر رو به خودش اختصاص میده در حالی که ممکنه مثلا صدمین آیتم توی دیتابیس باشه.اما اگه id رو به اکتیویتی نمایش جزئیات،بفرستین این مشکل حل میشه،چون همین آیتمی که توی لیست position صفر داشت با همون id خودش که صد بود،از دیتابیس بازیابی میشه.نمیدونم خوب توضیح دادم یا نه،اما امیدوارم منظورمو خوب انتقال داده باشم (اگه جاییش واضح نیست بگید توضیح بدم:) ) (7 سال پیش)
+1 0
ممنون از وقتی که گذاشتید منظور شمارو متوجه شدم ولی درست نیست راهی که بنده رفتم و نتیجه هم گرفتم درسته :) با این روش برنامه بدون هیچ کرشی داره کار میکنه من از دو ArrayList استفاده کردم یکی برای خوندن اطلاعات از دیتابیس دیگری برای جستجو زمانی که لیست ویو میخواهد addabter رو ست کنه اگه سرچ بود از Arraylist ای که با مقادیر نتایج جستجو پرشده میخونه در غیر این صورت با Array list ای که از دیتابیس پرشده ست میشه و همون طوری که خودتون اشاره کردید برای نمایش به position بستگی داره و این position هم به ترتیبی که در Array List پر شده مربوط هست و اشاره میکنه (7 سال پیش)
+1 0
اوکی.اما روشی که من گفتم با همون یه ArrayList هم مشکل حل میشد!(راه حل من اشتباه نیست،شاید توضیحاتی که نوشتم درست نتونست مفهوم رو انتقال بده) الان دقیق نمی دونم چه جوری این سناریو رو پیاده سازی کردین اما احتمالا شما با این کارتون حافظه بیشتری رو مصرف می کنید(البته باید کدهارو دید تا بشه این حرف رو ثابت کرد.). (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .