بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
rad 10 سال پیش
آخرین تغییر: 10 سال پیش

باسلام

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

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

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

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

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

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

            intent.putExtra("POSITION", position); 

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

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

نظرات

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

پاسخ‌ها 1

rad 10 سال پیش


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);

}

نظرات

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

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