یک اتفاق عجیب!!
با سلام
بنده یک custom control دارم که داخل اون تنها یک تکس ویو تعریف کردم
ومیخوام توی یک لایه ای در اکتیویتی به تعداد دلخواه ازاین کلاس اضافه کنم
وقتی اضافه میکنم کاملا درست اضافه میشه ولی وقتی میام ویک حلقه مینویسم تا مقدار همین تکس ویو هرکدوم ازاین کلاسها رو بهم برگردونه برای همه اونها تکس ویو اخرین کلاس رو برمیگردونه درحالی که من وقتی به جای custom control میام واز دکمه استفاده میکنم نام دکمه هارو هرکدوم رو بصورت درست نشون میده
اینم از کد custom control
public class CustomSetPoint extends LinearLayout {
public static TextView txtParamTitle;
public CustomSetPoint(Context context) {
super(context);
init(context);
}
public CustomSetPoint(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public CustomSetPoint(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view=inflater.inflate(R.layout.custom_setpoint,this,true);
txtParamTitle=(TextView)view.findViewById(R.id.txtParamTitle);
});
}
}
- این هم کد اکتیویتی من:
-
public class ActivitySetPoint extends AppCompatActivity {
public static String data="";
LinearLayout.LayoutParams layoutParams;
LinearLayout test;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setpoint);
test=(LinearLayout)findViewById(R.id.linearSetPoint);
for(int i=0;i<5;i++){
CustomSetPoint custom=new CustomSetPoint(G.context);
custom.txtParamTitle.setText(i+"hi");
layoutParam=new LinearLayout.LayoutParam(LinearLayout.LayoutParams.MATCH_PARENT,LinrarLayout.LayoutParams.WRAP_CONTENT);
test.addView(custom);
}
int count=test.getChildCount();
for(int i=0;i<count;i++){
View v=test.getChildAt(i);
CustomSetPoint custom=(CustomSetPoint) v;
Log.i("LOG",custom.txtParamTitle.getText().toString());
} - اینجا به جای اینکه برای من مقادیر hello0,hello1,hello2,... رو چاپ کنه برای همه مقادریر میاد وhello4 رو مینویسه درحالی که وقتی از دکمه استفاده میکنم به درستی hello1,hello2و... رو نشون میده
- ممنون میشم راهنمایی بفرمایید
- مگه خودش این تشخیص رو نمیده که این 5تا کلاس متفاوت هستن ونباید مقادیر یه کلاس دیگه روی اون یکی override بشن؟ایرادش کجاست؟
سلام.
راه حل مشکل شما اینه که باید فیلد کلاسی که تعریف کردین رو از حالت استاتیک دربیارین.
چون فیلد کلاستون رو از نوع استاتیک تعریف کردین، این فیلد، به کلاس، وابسته میشه و مستقل از آبجکت های ساخته شده از کلاس میشه.یعنی حتی اگه 1000 تا نمونه هم از روی این کلاس بسازین،بازم یه فیلد txtParamTitle توی حافظه وجود خواهد داشت که همیشه آخرین مقداری که توش ست میشه رو نگه میداره و یه خصوصیته که متعلق به خود کلاسه.
اما اگه از حالت استاتیک دربیاد،به ازای هر آبجکتی که از کلاستون میسازید،یه دونه متغیر از نوع تکست ویو هم بهمراه اون آبجکت ساخته میشه که متعلق به همون آبجکت خواهد بود.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
Log.i("LOG",custom.txtParamTitle);یعنی می خواید که خود TextView رو چاپ کنید. بجاش بنویسید:Log.i("LOG", custom.txtParamTitle.getText().toString());(9 سال پیش)