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

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

saeed_435  11 سال پیش  11 سال پیش
0 0

باسلام

برنامه من شامل یه لیست ویو که از آرایه تغذیه میشه،حالا میخام براساس یه فیلد آرایه شرطی بذارم که اگه فیلد 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);
}
});
}

ممنون

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

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

 image.setImageBitmap(null);

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

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

این کل آداپتر

 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 سال پیش
0 0

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

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

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