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

یک اتفاق عجیب!!

General  9 سال پیش  9 سال پیش
0 0

با سلام

بنده یک 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);



});
}
}


 
  1. این هم کد اکتیویتی من:
  2. 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());

    }
     
  3. اینجا به جای اینکه برای من مقادیر hello0,hello1,hello2,... رو چاپ کنه برای همه مقادریر میاد وhello4 رو مینویسه درحالی که وقتی از دکمه استفاده میکنم به درستی hello1,hello2و... رو نشون میده
  4. ممنون میشم راهنمایی بفرمایید
  5. مگه خودش این تشخیص رو نمیده که این 5تا کلاس متفاوت هستن ونباید مقادیر یه کلاس دیگه روی اون یکی override بشن؟ایرادش کجاست؟
+2 0
نوشتید Log.i("LOG",custom.txtParamTitle); یعنی می خواید که خود TextView رو چاپ کنید. بجاش بنویسید: Log.i("LOG", custom.txtParamTitle.getText().toString()); (9 سال پیش)
0 0
ممنون ولی همین کد رو نوشتم حالا توی اینجا فراموش کردم وگرنه همین رو مینویسم ولی بازم واسه همه مقدار تکس ویو اخرینکلاس رو درج میکنه (9 سال پیش)
0 0
از دوستان کسی نیست جواب بده؟؟واقعا گیرم لطفا کمک بفرمایید (9 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
sami  9 سال پیش
+4 0

سلام.

راه حل مشکل شما اینه که باید فیلد کلاسی که تعریف کردین رو از حالت استاتیک دربیارین.

چون فیلد کلاستون رو از نوع استاتیک تعریف کردین، این فیلد، به کلاس، وابسته میشه و مستقل از آبجکت های ساخته شده از کلاس میشه.یعنی حتی اگه 1000 تا نمونه هم از روی این کلاس بسازین،بازم یه فیلد txtParamTitle توی حافظه وجود خواهد داشت که همیشه آخرین مقداری که توش ست میشه رو نگه میداره و یه خصوصیته که متعلق به خود کلاسه.

اما اگه از حالت استاتیک دربیاد،به ازای هر آبجکتی که از کلاستون میسازید،یه دونه متغیر از نوع تکست ویو هم بهمراه اون آبجکت ساخته میشه که متعلق به همون آبجکت خواهد بود.

0 0
داداش یعنی خدا خیرت بده یکی از دوستام اینو گفت حل شد اومدم اینجا که جوابشو بگم که شما گفتید کجا بودی شما؟؟؟ زودتر میومدی:)))) ممنونم ازتون مشکل استاتیک بودن فیلدها بود (9 سال پیش)
+1 0
خدارو شکر.مهم اینه که مشکل حل شد.اما من سعی کردم از فرصت استفاده کنم و یه کم توضیح در مورد استاتیک بودن بنویسم تا شاید اگه احیانا بقیه دوستان به همچین مشکلی برخوردن،با خوندن این جواب،نحوه درست استفاده کردن از فیلد استاتیک رو یاد بگیرن... (9 سال پیش)
+2 0
خدا که خیر میرسونه ولی شما هم خیرت به بقیه برسه ، حداقل تشکر اینه که نظرات و پاسخ ها لایک بشه ، حتی نظری که جواب درست نباشه ( چون وقت گذاشته شده ) . (9 سال پیش)

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