ورود

View Full Version : مشکل رفتن از یک listView Custom به یک activity دیگر



saso_008
جمعه 01 اسفند 1393, 13:52 عصر
با سلام
من یک listViewCustom دارم که وقتی کلیک میکنم روی ایتماش به اکتیویتی جدیدی که ایجاد کردم نمیره و ارور میده چکار باید کنم ایا کد کلیک رو اشتباه وارد کردم
لطفا راهنمایی کنید.

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ListtActivity extends ListActivity {
String[] listt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listt);
setListAda​pter(new MyAdapter(this,
android.R.layout.simple_list_item_1,
R.id.textView1, getResources().getStringArray(R.array.list)));
}
@Override
protected void onListItemClick(
ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Toast.makeText(this,listt [position]+":ra entekhab konid",
Toast.LENGTH_SHORT).show();
switch(position){
case 0:
startActivity(new Intent(ListtActivity.this, oneActivity.class));
break;
case 1:
startActivity(new Intent(ListtActivity.this,twoActivity.class));
break;
case 2:
startActivity(new Intent(ListtActivity.this, threeActivity.class));
break;
case 3:
startActivity(new Intent(ListtActivity.this, fourActivity.class));
default:
break;
}
}
public class MyAdapter extends ArrayAdapter<String>{
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] strings) {
super(context, resource, textViewResourceId, strings);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater =(LayoutInflater) getSystemService(Context.
LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.list_custom,
parent, false);
String[] items = getResources().getStringArray(R.array.list);
ImageView iv = (ImageView) row.findViewById(R.id.imageView1);
TextView tv = (TextView) row.findViewById(R.id.textView1);
tv.setText(items[position]);
if(items[position].equals("one")){
iv.setImageResource(R.drawable.one);
}
else if(items[position].equals("two")){
iv.setImageResource(R.drawable.two);
}
else if(items[position].equals("three")){
iv.setImageResource(R.drawable.three);
}
else if(items[position].equals("four")){
iv.setImageResource(R.drawable.four);
}
return row;
}
}
}

1masoud1
جمعه 01 اسفند 1393, 22:37 عصر
دوست عزیز کاش کد خطا رو هم میذاشتی اینجوری دقیق تر میشه راهنمایی کرد اگر من درست فهمیده باشم قراره در این برنامه وقتی روی یک آیتم کلیک میشه به یک اکتیوتی جدید بره و متناسب با هر آیتمی متن و عکس مشخصی در اکتیویتی مربوطه نشون داده بشه.
اگر همینجوری که گفتم باشه برنامه ات چند تا اشکال داره:
--اول اینکه باید مشخص کنی میخوای یک لیست ساده داشته باشی یا لیست سفارشی :
باید نام آیتم ها رو داخل یک آرایه ذخیره کنی مثلا :
Stirng[] items= {item1 , item2 , item3 , item 4};

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


ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,


android.R.layout.simple_list_item_1, android.R.id.text1, items);




کافیه و دیگه نیازی نیست که بیای کلاس دیگه ای از ArrayAdapter مشتق کنی ولی اگربخوای لیست سفارشی داشته باشی باید اون کلاسی که ایجاد کردی باشه.

-- دوم اینکه اگر برنامه ات همون جوریه که گفتم (یعنی با کلیک بر هر آیتم به یک صفحه جدید بره و متن و عکس مشخصی نشون بده ) نیازی نیست که برای هر آیتم یک اکتیوتی جدا ساخته بشه یک اکتیوتی میسازی و باکلیک بر هر آیتمی اکتیوتی خودش تغییر میکنه برای این کار باید متنها رو در یک آرایه رشته ای و عکس هر اکتیویتی رو هم داخل یک آرایه int ذخیره کنی به عنوان مثال :



String[] title = {matn1,matn2,matn3 , matn4};

int[] image = {R.drawable.image1 , R.drawable.image2 , R.drawable.image3 , R.drawable.image4};



حالا میای تو متد OnItemClick (نیازی به Switch نیست )مینویسی :



Intent i = new Intent( اکتیوتی مبدا. this , اکتیویتی مقصد . class );
i.putExtra("برچسب متن ", title[position]);
i.putExtra("برچسب تصاویر", image[position];
startActivity(i);

در واقع هر وقت روی یک آیتم کلیک میشه متد OnItemClick میاد بر حسب مقدار position به آرایه ها مراجعه میکنه و با استفاده از متد putExtra مقدار مورد نظرشو بر میداره و به اکتیوتی مقصد منتقل می کنه حالا باید بیای تو اکتیوتی مقصد و کدهای فرستاده شده از اکتیوتی مبدا رو دریافت کنی :


Bundle ex = getIntent().getExtras();


حالا که دریافت کردی میای مقادیر رو به TextView , ImageView نسبت میدی مثلا:


TextView header = ex.getString("برچسب متن");
ImageView img = ex.getInt("برچسب تصاویر");


جنس آرایه ات هر چی که بود اینجا بر حسب همون دریافت میکنی و باید دقت داشته باشی که نام های برچسب ها در مبدا و مقصد باید یکی باشه.
این لینک ها میتونه کمکت کنه :

لیست ویو ساده (http://androidexample.com/Create_A_Simple_Listview_-_Android_Example/index.php?view=article_discription&aid=65&aaid=90)

لیست ویوی سفارشی (http://www.codelearn.org/android-tutorial/android-listview)

آموزش فارسی لیست ویو (http://www.kelidestan.com/keys/categories.php?MainCategory=2&SubCategory=9)

saso_008
شنبه 02 اسفند 1393, 10:21 صبح
سلام دوست عزیز
منظور من اینه که الان من یک لیست ویو شخصی دارم که برای هر کدوم از ایتمام یک عکس و یک نوشته دارم . حالا کاری که من میخوام انجام بدم اینه که به ازای کلیک کردن روی هر ایتم به یک اکتیویتی جدا برم و نه اینکه اون اکتیویتی جدیدم عکس یا متنی داشته باشه
ممنون بابت کدهایی که دادین ولی بازم نشد و این مدل اکتیوتی استرینگ توی فایل value ذخیره کردم و از اونجا فراخوانی میکنم
حالا من به یه صورت دیگه کد نوشتم الان من بخوام برای اینکه برای هر ایتمی ک دارم به یک اکتیویتی برم کد کلیک کردنم باید به چه صورت باشه ؟؟؟؟

فایل CUSTOM
public class CustomListAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] itemname;
private final Integer[] imgid;
public CustomListAdapter(Activity context, String[] itemname,Integer[] imgid) {
super(context, R.layout.mylist, itemname);
this.context = context;
this.itemname =itemname;
this.imgid = imgid;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.mylist, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);
txtTitle.setText(itemname[position]);
imageView.setImageResource(imgid[position]);
extratxt.setText("Description "+itemname[position]);
return rowView;
}
}

فایل MAIN
import android.os.Bundle;
import android.app.ListActivity;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends ListActivity {
String[] itemname ={"A","B","C","D"};
Integer[] imgid={R.drawable.A,R.drawable.B,R.drawable.C,R.dr awable.D};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid);
setListAdapter(adapter);
}
protected void onListItemClick(ListView l, View view, int position, int imgid) {
String Selecteditem = (String) getListAdapter().getItem(position);
Toast.makeText(this, Selecteditem, Toast.LENGTH_SHORT).show();
}
}

1masoud1
شنبه 02 اسفند 1393, 13:19 عصر
سلام
برنامشو واست نوشتم امیدوارم مشکلتو حل کنه
یک لیست ویوی سفارشی که در هر آیتم یک متن متفاوت و یک عکس متفاوت قرار دازه که با کلیک بر هر آیتم به یک اکتیویتی دیگه منتقل میشه و متن و عکس اون آیتم رو نشون میده

لینک دانلود (http://cld.persiangig.com/dl/Au1y6v/ExampleListView.zip)

saso_008
شنبه 02 اسفند 1393, 15:00 عصر
سلام
برنامشو واست نوشتم امیدوارم مشکلتو حل کنه
یک لیست ویوی سفارشی که در هر آیتم یک متن متفاوت و یک عکس متفاوت قرار دازه که با کلیک بر هر آیتم به یک اکتیویتی دیگه منتقل میشه و متن و عکس اون آیتم رو نشون میده

لینک دانلود (http://cld.persiangig.com/dl/Au1y6v/ExampleListView.zip)

سلام
اقا مسعود خیلی ممنون
ولی نمیدونم این چه مرگشه هرکار میکنم با اجرا نمیشه هر نوع روشیم امتحان کردم ولی بازم نشده:ناراحت:

saso_008
دوشنبه 04 اسفند 1393, 17:09 عصر
سلام
ممنون از جوابات دوست عزیز بالاخره حل شده مشکل با این شیوه که گفتی :لبخندساده: