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

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

محمد خوش نظر  12 سال پیش  11 سال پیش
+2 0

سلام دوستان

اولا بهتون اطمینان میدم که من قبل از پرسیدن این سوال سرچ کردم و تنها 1 سوال مانند سوال خودم در سرویس پیدا کردم ولی متاسفانه چیزی ازش متوجه نشدم!

سوال که واضحه! میخوام وقتی روی هریک از آیتمهای لیست ویو کلیک میکنم به یک اکتیویتی خاص بره( منظور من Intent نیست)! اما از اونجایی که یک سری کد پیدا کردم که نتونستم محل قرارگیریشو پیدا کنم. یعنی اگر با توجه به ویدیوی لیست ویو پیش بریم کدهای موجود در این لینک یا این لینک رو باید در کدوم اکتیویتی کپی کنم؟

در اکتیویتی AdapterNote ؟ یا در اکتیویتی ای که لیست ویو تعریف شده (منظورم کنار حلقه for ای هستش که تعداد آیتم هارو میسازه) ؟

و مورد بعدی اینه که ایکلیپس من اصلا onItemClick رو شناسایی نمیکنه!؟

ممنون

0 0
جناب خوش نظر ، باتوجه به اینکه بنده فعلا در سطح مبتدی هستم ، چیزی که بلدم اینه که شما برای لایه ای که لیست رو در بر میگیره یک آیدی در نظر بگیرید (همونی که در ویدئو آیدی layoutRoot داده شد.حالا در موقغ onClickListener نوشتن براش ، از دستور if استفاده کنید که چنانچه مثلا title آیتم فلان چیز بود ، فلان intent انجام شه و اگر چیز دیگر بود صفحه دیگری باز شه و الی ...) البته حتما روش حرفه ای ای وجود خواهد داشت. (ایین روشی بود که تا اینجا به یاد گرفتم بنده) (12 سال پیش)
0 0
جناب دادپرور سلام. ممنون از راهنماییتون. آقا شکست نفسی میفرمایید. شما مبتدی باشید من دیگه خیلی داغونم.خخخخخ جدا از شوخی راهی که گفتید رو تست کردم اما نتیجه نداد! ینی onClickListener برای لیست ویو کار نمیکنه و باید از onItemClick استفاده کرد که متاسفانه ایکلیپس من شناسایی نمیکنه! مشکل من با جای کدها هستش! محل قرارگیری کدها باید توی اکتیویتی AdapterNote باشه؟؟؟؟ (12 سال پیش)
0 0
برای سهولت کار برای سایر عزیزان ، علاوه بر پروژه ، توضیحات و کد نیز در متن پاسخم در پاسخ چهارم درج شد (بله در AdapterNote .البته این برای سایرین هست.شما که مشکلتون برطرف شد) (12 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
مجتبی یگانه  12 سال پیش
+3 0

خوب پاسخ من رو در اولین لینک مطالعه کردید ، اما اینجا توضیح بیشتری میزارم شاید کمکتون کنه :)

برای جابجایی بین اکتیویتی ها باید از intent استفاده بشه ، من یک مثال به این شکل برای استفاده در لیست ویو مطرح میکنم 

اگر ID <10 برو به Activity1 در غیر اینصورت برو به Activity2

private void onItemClickProcess(int ID) {
	if (id < 10) {
		startActivity(new Intent(activityMain.this, Activity1.class));
	}
	else {
		startActivity(new Intent(activityMain.this, Activity2.class));
	}
}

خوب حالا این تابع تو کلیک شدن آیتم فراخوانی کنید 

onItemClickProcess(item.ID);
0 0
جناب A.L.U از پاسخ شما هم ممنونم. اما عرض کردم مشکل من Intent نیست! ینی میدونم با Intent باید برم به اکتیویتی دیگه! عرض کردم مثلاهمین تیکه کد شما رو من باید در اکتیویتی AdapterNote بکار ببرم؟ضمن اینکه onItemClick رو ایکلیپس من اصلا شناسایی نمیکنه در اکتیویتی AdapterNote! امیدوارم منظورم رو واضح رسونده باشم. ممنون (12 سال پیش)
0 0
ببخشید ، متوجه منظورتون نشده بودم ، خداروشکر حل شد :) (12 سال پیش)
پاسخ به سوال 
Hossein Rezaei  12 سال پیش
+4 0

من روی پروژه Notes خود استاد اینکارو انجام میدم که مفهومتر باشه

اول یک فیل ID به StructureNote اضافه میکنیم:

 public class StructNote {

public String title;
public int ID;//<<<<<<<<<<<<<<<<<<<<<
public String description;
public boolean done;
}

بعد هر جایی که مقادیر لیست ویو مقدار دهی اولیه میشن، مقدار ID اونها رو هم ست میکنیم، برای مثال من توو کلاس G مقداردهی اولیه رو انجام میدم:

 public class G extends Application {

public static Activity currentActivity;
public static Context context;
public static LayoutInflater inflator;
public static ArrayList<StructNote> notes = new ArrayList<StructNote>();


@Override
public void onCreate() {
super.onCreate();
context = this.getApplicationContext();
inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
initialization();

}


private void initialization() {
for (int i = 0; i < 10; i++) {
StructNote note = new StructNote();
note.description = "description number " + i;
note.done = false;
note.title = "Title number " + i;
note.ID = i;//<<<<<<<<<<<<<<<<<<<<<
notes.add(note);
}
}
}

خب حالا توی کلاس AdapterNote با توجه به ID هر فیلد، اون رو به اکتیویتی دلخواه راهنمایی میکنم:(من فقط تابع fill که دستکاری شده رو مینویسم)

         public ViewHolder(View view) {

layoutRoot = (ViewGroup) view.findViewById(R.id.layoutRoot);//شامل همه ی عناصر یک فیلد است،یعنی در حقیقت لایه در بر دارنده کل یک فیلد
}


public void fill(final ArrayAdapter<StructNote> adaptor, final StructNote item, final int position) {

txtTitle.setText(item.title);
txtDescription.setText(item.description);
chkDone.setChecked(item.done);

layoutRoot.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {

//جان ALU حالا با توجه به مثال<<<<<<<<<<<<<<<<<<<<<

if (item.ID < 5) {
Intent intent = new Intent(G.currentActivity, ActivitySecond.class);
G.currentActivity.startActivity(intent);
} else {
Intent intent = new Intent(G.currentActivity, ActivityThird.class);
G.currentActivity.startActivity(intent);
}

}
});

}
}

0 0
ممنونم آقای رضایی. من تمام این کارهارو انجام دادم اما در نهایت وقتی روی هر آیتم کلیک میکنم فورس کلوز میده! ضمن اینکه من 12 تا آیتم دارم. ینی شرط داخل if های تودرتو برابر با اعداد 1 تا 12 میشه! اما باز هم کار نمیکنه!! (12 سال پیش)
0 0
خواهش میکنم، آیا لیست تمام اکتیویتی هاتون رو به منیفست اضافه کردین؟من این کد اول رو خودم زدم توو Eclips و وقتی مطمئن شدم درسته upload ش کردم. ضمنا موقع crash شما میتونید توو logcat ببینید که Error مربوط به چیه و کدوم خط از برنامه باعث کرش میشه (12 سال پیش)
0 0
شرمنده انقد غرق تعریف و بازی با کد شده بودم که یادم رفته بود اکتیویتی رو تعریف کنم. خدا خیرت بده برادر :دی (12 سال پیش)
0 0
موفق باشی (12 سال پیش)
پاسخ به سوال 
ahmad1989  12 سال پیش
+3 0

این کدو در نظر بگیر:

 mylistview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

      }
    });

حالا تو تابع onItemclick یه دستور سوییچ بر اساس مقادیر position مینویسی بعد تو هر کدوم از قسمت های سوییچ دستور رفتن به یک اکتیویتی رو وارد میکنی:

switch(position){
case 0:
Intent intent =newIntent(G.currentActivity,Activity1.class);
G.currentActivity.startActivity(intent);
break();
case 1:
Intent intent =newIntent(G.currentActivity,Activity2.class);
G.currentActivity.startActivity(intent);
break();
.
.
.
.

 

0 0
خب درسته! اما گفتم که اصلا setOnItemClickListener در layoutRoot شناسایی نمیشه که بخوام براش کیس بنویسم! مشکل منم همینجاست!! (12 سال پیش)
0 0
درضمن جناب خوش نظرsetOnItemClickListener ازرویدادهای لیست ویو هست پس تو layoutRoot شناسایی نمیشه!layoutRoot هم ست تاچ داره که میشه استفاده کرد.پس مشکل از اکلیپس شما نیست وهم میشه از روش آقای رضایی و aluبه نتیجه رسید وهم طبق کد فوق ،جایی که لیست ویو تعریف شده است.بهر حال خداروشکر که به نتیجه رسیدید. (11 سال پیش)
0 0
ممنون خانوم Solin . بله خودمم متوجه شدم که ست آن آیتم متعلق به لیست ویو هستش. در واقع الان دنبال این هستم که کدومش بهینه تره و سریعتر کار میکنه. (11 سال پیش)
پاسخ به سوال 
Dadparvar  12 سال پیش
+3 0

همونطور که در دیدگاهم در پست اول درج کردم ، ببینید با همون onClickListener ساده میتونید اینکار رو انجام بدید.

من پروژه جلسه دهم رو طوری ویرایش کردم که وقتی در لیست ، روی آیتم Title 1 کلیک کنید بره در صفحه ای ، و اگر روی Title 2 ، یعنی روی آیتم دوم بطور کل ، کلیک کنید بره به صفحه دیگر ، و اگر روی سومی کلیک کنید بره به صفحه جدید دیگر. (بقیه آیتم هارو هم غیرفعال کردم که شلوغ نشه)

دانلود پروژه: MyListView.zip
فایل AdapterNote ویرایش شده.قسمت fill .کدش در نهایت به این شکل در اومد:

layoutRoot.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (item.title.equals("Title 1")) {
Intent intent = new Intent(G.currentActivity, ActivityTitleOne.class);
G.currentActivity.startActivity(intent);
} else if (item.title.equals("Title 2")) {
Intent intent = new Intent(G.currentActivity, ActivityTitleTwo.class);
G.currentActivity.startActivity(intent);
} else if (item.title.equals("Title 3")) {
Intent intent = new Intent(G.currentActivity, ActivityTitleThree.class);
G.currentActivity.startActivity(intent);
}

}
});

طبیعیه که کلاس های صفحات ساخته شده و فایل xml شون هم ساخته شده و در Manifest هم تعریف شدند.

0 0
ممنون جناب دادپرور. زحمت کشیدید (12 سال پیش)

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