گذاشتن شرط درون Adapter listView
باسلام
برنامه من شامل یه لیست ویو که از آرایه تغذیه میشه،حالا میخام براساس یه فیلد آرایه شرطی بذارم که اگه فیلد 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);
}
});
}
ممنون
اولین چیزی که باید بررسی کنید شرطی هست که گذاشتید، باید دیباگ کنید و کلمه فارسی درون شرط رو با کلمه توی دیتابیس یا آریتون مقایسه کنید، اگر اون مشکل نداشت، همونطوری که اسپریت عزیز گفتن باید برای شرطتون یه Else بذارید که میتونی از کد زیر استفاده کنی که تست شده و درست کار میکنه:
image.setImageBitmap(null);
اگر دیباگ نمیکنید میتونید یک تگ لاگ توی هر قسمتی که گفته شد بذارید تا تست دقیقی انجام بدید.
این کل آداپتر
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;
}
}
به جای item.callDuration.equals از item.callDuration.contains استفاده کنید نتیجه رو بگید، هیچ وقت نباید استرینگ فارسی رو مقایسه کنید، بهترین کار اضافه کردن یک فیلد عددی برای مقایسه است.
توی If , Else هرکدوم یک تگ لاگ فرار بدید و ببینید همه لاگ ها رو از توی If چاپ میکنه یا از توی Else هم چیزی چاپ میکنه
اگر با همه اینا نشد اسکرین شات های لاگ هارو هم اضافه کنید و item.callDuration == رو هم تست کنید
و اگر اون هم کار نکرد پروژه و دیتابیس تون رو بفرستید تا براتون درستش کنم، بیشتر از این بدون دیباگ کردن کاری از دستم بر نمیاد
-----------
قبل از if یک لاگ به صورت زیر هم قرار بدید که مطمئن بشید هم متغیرتون شامل ثبت نشده هست هم 2 رو داره، چون & گذاشتید حتما باید 2 تا شرط برقرار باشه
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .