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

گذاشتن شرط درون Adapter listView

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

باسلام

برنامه من شامل یه لیست ویو که از آرایه تغذیه میشه،حالا میخام براساس یه فیلد آرایه شرطی بذارم که اگه فیلد A برابر یک بود عکسیو تو لیست ویو نشون بده و درغیر اینصورت نشون نده،کد داخل متد fill نوشتم اما با بالا پایین کردن لیست ویو اطلاعات بهم میریزه.

استاد تو فیلمش گف onclick listener بذارینو اینا،من اینجا که فقط if دارم باید چطور بنویسم برناممو؟
این متد fill امه!

 public void fill(ArrayAdapter<StructCall> adapter, final StructCall item, final int position) {

txtNameAccount.setText(item.accountName);
txtCallTime.setText(item.callTime);
txtTelNumber.setText(item.telNumber);
txtCallDuration.setText(item.callDuration);
txtInternalNumber.setText(item.internalNumber);
txtCodeAccount.setText(item.codeAccount);


/شرط که بررسی میشه لیست قاطی میکنه
if (item.callDuration.equals("ثبت نشده") && item.missedCall.equals("2")) {
imgMissCall.setImageResource(R.drawable.missed_call);
}

linearLayoutCall.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent phoneIntent = new Intent(Intent.ACTION_CALL);
phoneIntent.setData(Uri.parse("tel:051" + item.telNumber));
G.currentActivity.startActivity(phoneIntent);
}
});
}

ممنون

نظرات

Spirit 11 سال پیش
باید برای عکس اون شرط هم با else یک دستوری بنویسید تا یه عکس دیگه نشون بده یا کلاً اون view رو مخفی کنه.
saeed_435 11 سال پیش
ممنون کد زیرو اضافه کردم ولی بازهم با جابه جا کردن لیست اطلاعات بهم میریزه: if (item.callDuration.equals("ثبت نشده") && item.missedCall.equals("2")) { imgMissCall.setImageResource(R.drawable.missed_call); } else { imgMissCall.setVisibility(View.GONE); }
saeed_435 11 سال پیش
ببخشید بهم ریخت:else اضافه کردم ولی مشکلک حل مشد ،لیستو بالا پایین میکنم اطلاعات بهم میریزه.
Spirit 11 سال پیش
میتونه از رعایت نکردن ViewHolder Pattern باشه لینک
saeed_435 11 سال پیش
سلام ممنون از پاسختون ولی مشکلمو حل نکرد،دوستان یه نگاهی به من بندازین :(

پاسخ‌ها 3

Hajhosseini 11 سال پیش

اولین چیزی که باید بررسی کنید شرطی هست که گذاشتید، باید دیباگ کنید و کلمه فارسی درون شرط رو با کلمه توی دیتابیس یا آریتون مقایسه کنید، اگر اون مشکل نداشت، همونطوری که اسپریت عزیز گفتن باید برای شرطتون یه Else بذارید که میتونی از کد زیر استفاده کنی که تست شده و درست کار میکنه:

 image.setImageBitmap(null);

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

نظرات

saeed_435 11 سال پیش
مهندس شرطم و خوندن از بانکم درسته ،مقادیرو چک کردم،مشکل تو لیست ویومه،بار اول که لیست ویوم باز میشه درسته ،لیستو که بالا پایین میکنم داده ها بهم میریزه!
Hajhosseini 11 سال پیش
بقیه کدهای آداپترتون رو هم درج کنید لطفا، با تمام تغییراتی که دادید و قسمتایی که گفته شد
saeed_435 11 سال پیش

این کل آداپتر

 public class AdapterCallIn extends ArrayAdapter<StructCall> {

public AdapterCallIn(ArrayList<StructCall> array) {
super(G.context, R.layout.adapter_call_in, array);
}


private static class ViewHolder {

public TextView txtNameAccount;
public TextView txtCallTime;
public TextView txtTelNumber;
public TextView txtCallDuration;
public TextView txtInternalNumber;
public LinearLayout linearLayoutCall;
public LinearLayout linearLayoutRoot;
public TextView txtCodeAccount;
public ImageView imgMissCall;


public ViewHolder(View view) {
txtNameAccount = (TextView) view.findViewById(R.id.txtNameAccount);
txtCallTime = (TextView) view.findViewById(R.id.txtCallTime);
txtTelNumber = (TextView) view.findViewById(R.id.txtTelNumber);
txtCallDuration = (TextView) view.findViewById(R.id.txtCallDuration);
txtInternalNumber = (TextView) view.findViewById(R.id.txtInternalNumber);
linearLayoutCall = (LinearLayout) view.findViewById(R.id.LinearLayoutCall);
linearLayoutRoot = (LinearLayout) view.findViewById(R.id.linearLayoutRoot);
txtCodeAccount = (TextView) view.findViewById(R.id.txtCodeAccount);
imgMissCall = (ImageView) view.findViewById(R.id.imgMissCall);
}


public void fill(ArrayAdapter<StructCall> adapter, final StructCall item, final int position) {

txtNameAccount.setText(item.accountName);
txtCallTime.setText(item.callTime);
txtTelNumber.setText(item.telNumber);
txtCallDuration.setText(item.callDuration);
txtInternalNumber.setText(item.internalNumber);
txtCodeAccount.setText(item.codeAccount);
if (item.callDuration.equals("ثبت نشده") && item.missedCall.equals("2")) {
imgMissCall.setImageResource(R.drawable.missed_call);
} else {
imgMissCall.setVisibility(View.GONE);
}
linearLayoutCall.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent phoneIntent = new Intent(Intent.ACTION_CALL);
phoneIntent.setData(Uri.parse("tel:051" + item.telNumber));
G.currentActivity.startActivity(phoneIntent);
}
});
}
}


@Override
public View getView(int position, View convertView, ViewGroup parents) {

ViewHolder holder;
StructCall item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.adapter_call_in, parents, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);

} else {
holder = (ViewHolder) convertView.getTag();

}
holder.fill(this, item, position);
return convertView;
}
}

نظرات

Hajhosseini 11 سال پیش

به جای  item.callDuration.equals از item.callDuration.contains استفاده کنید نتیجه رو بگید، هیچ وقت نباید استرینگ فارسی رو مقایسه کنید، بهترین کار اضافه کردن یک فیلد عددی برای مقایسه است.
توی If , Else هرکدوم یک تگ لاگ فرار بدید و ببینید همه لاگ ها رو از توی If چاپ میکنه یا از توی Else هم چیزی چاپ میکنه
اگر با همه اینا نشد اسکرین شات های لاگ هارو هم اضافه کنید و 
item.callDuration == رو هم تست کنید
و اگر اون هم کار نکرد پروژه و دیتابیس تون رو بفرستید تا براتون درستش کنم، بیشتر از این بدون دیباگ کردن کاری از دستم بر نمیاد
-----------
قبل از if یک لاگ به صورت زیر هم قرار بدید که مطمئن بشید هم متغیرتون شامل ثبت نشده هست هم 2 رو داره، چون & گذاشتید حتما باید 2 تا شرط برقرار باشه

نظرات

Hajhosseini 11 سال پیش
در صورتی که مشکلتون حل شد به صورت سوال ( حل شده ) رو اضافه کنید که بقیه دوستان هم اگر این مشکل رو داشتن بتونن به نتیجه برسن.

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