رفتن به اکتیویتی های مختلف در لیست ویو
سلام دوستان
اولا بهتون اطمینان میدم که من قبل از پرسیدن این سوال سرچ کردم و تنها 1 سوال مانند سوال خودم در سرویس پیدا کردم ولی متاسفانه چیزی ازش متوجه نشدم!
سوال که واضحه! میخوام وقتی روی هریک از آیتمهای لیست ویو کلیک میکنم به یک اکتیویتی خاص بره( منظور من Intent نیست)! اما از اونجایی که یک سری کد پیدا کردم که نتونستم محل قرارگیریشو پیدا کنم. یعنی اگر با توجه به ویدیوی لیست ویو پیش بریم کدهای موجود در این لینک یا این لینک رو باید در کدوم اکتیویتی کپی کنم؟
در اکتیویتی AdapterNote ؟ یا در اکتیویتی ای که لیست ویو تعریف شده (منظورم کنار حلقه for ای هستش که تعداد آیتم هارو میسازه) ؟
و مورد بعدی اینه که ایکلیپس من اصلا onItemClick رو شناسایی نمیکنه!؟
ممنون
خوب پاسخ من رو در اولین لینک مطالعه کردید ، اما اینجا توضیح بیشتری میزارم شاید کمکتون کنه :)
برای جابجایی بین اکتیویتی ها باید از 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);
من روی پروژه 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);
}
}
});
}
}
این کدو در نظر بگیر:
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();
.
.
.
.
همونطور که در دیدگاهم در پست اول درج کردم ، ببینید با همون 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 هم تعریف شدند.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .