ورود

View Full Version : بررسی اطلاعات یک اکتیویتی در اکتیویتی دیگر



kamran_14
یک شنبه 14 بهمن 1397, 19:08 عصر
سلام
خسته نباشید
ما در این کد اطلاعات یک اکتیویتی رو در یک اکتیویتی دیگر انتقال دادیم
در این کد هم Activity.findViewById نوشته شده و یه بار دیگر linearlayout را پیدا کرده و نوشته شده linearlayout.findViewById
آیا نیازه یه بار دیگه linearlayout را پیدا کنیم؟ مگر activity کافی نیست؟

package com.google.myapplication;
import android.app.Activity;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;

/**
* Created by user on 03/02/2019.
*/

public class FormInfo {
private Activity activity;
private LinearLayout linearLayout;
private EditText txtName;
private EditText txtPhone;
private EditText txtEmail;
private CheckBox chk;
private Button button;

public FormInfo(Activity activity, int linearLayoutId)
{
this.activity=activity;
linearLayout=(LinearLayout)activity.findViewById(l inearLayoutId);
init();
}

private void init()
{
txtName=(EditText)linearLayout.findViewById(R.id.e ditText2);
txtEmail=(EditText)linearLayout.findViewById(R.id. editText3);
txtPhone=(EditText)linearLayout.findViewById(R.id. editText4);
chk=(CheckBox)linearLayout.findViewById(R.id.check Box);
button=(Button)linearLayout.findViewById(R.id.butt on2);
}
}

farhad_shiri_ex
دوشنبه 15 بهمن 1397, 08:01 صبح
سلام
خسته نباشید
ما در این کد اطلاعات یک اکتیویتی رو در یک اکتیویتی دیگر انتقال دادیم
در این کد هم Activity.findViewById نوشته شده و یه بار دیگر linearlayout را پیدا کرده و نوشته شده linearlayout.findViewById
آیا نیازه یه بار دیگه linearlayout را پیدا کنیم؟ مگر activity کافی نیست؟

package com.google.myapplication;
import android.app.Activity;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;

/**
* Created by user on 03/02/2019.
*/

public class FormInfo {
private Activity activity;
private LinearLayout linearLayout;
private EditText txtName;
private EditText txtPhone;
private EditText txtEmail;
private CheckBox chk;
private Button button;

public FormInfo(Activity activity, int linearLayoutId)
{
this.activity=activity;
linearLayout=(LinearLayout)activity.findViewById(l inearLayoutId);
init();
}

private void init()
{
txtName=(EditText)linearLayout.findViewById(R.id.e ditText2);
txtEmail=(EditText)linearLayout.findViewById(R.id. editText3);
txtPhone=(EditText)linearLayout.findViewById(R.id. editText4);
chk=(CheckBox)linearLayout.findViewById(R.id.check Box);
button=(Button)linearLayout.findViewById(R.id.butt on2);
}
}
الان مشکل چی دوست عزیز! به این اشاره نکردید که!
منظورتون از این سوال چی ؟


آیا نیازه یه بار دیگه linearlayout را پیدا کنیم؟ مگر activity کافی نیست؟

الان شما که در سازنده یک آبجکت دیگه از linearlyaout دوباره ساختید!
به نظرم اینطوری خیلی بهتره...

package com.google.myapplication;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;

/**
* Created by user on 03/02/2019.
*/

public class FormInfo {

private LinearLayout linearLayout;
private EditText txtName;
private EditText txtPhone;
private EditText txtEmail;
private CheckBox chk;
private Button button;

public FormInfo(LinearLayout lLayout)
{
this.linearLayout=lLayout;
init();
}

private void init()
{
txtName=(EditText)linearLayout.findViewById(R.id.e ditText2);
txtEmail=(EditText)linearLayout.findViewById(R.id. editText3);
txtPhone=(EditText)linearLayout.findViewById(R.id. editText4);
chk=(CheckBox)linearLayout.findViewById(R.id.check Box);
button=(Button)linearLayout.findViewById(R.id.butt on2);
}
}

هم سبکتره و هم وابستگی ها را کمینه کردیم!
والبته این روش که خیلی کم هزینه تر هست و هم شی FLY Weight استفاده شده وهم وابستگی ها کاهش پیدا کرده...

package com.google.myapplication;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;

/**
* Created by user on 03/02/2019.
*/

public class FormInfo {

private
List<View> list_View ;
public FormInfo(list<View> lView){
list_View = lView;
}

private void show(){
txtName = list_View.get(0);
txtName = list_View.get(1);
txtEmail= list_View.get(2);
txtPhone= list_View.get(3);
chk = list_View.get(4);
button = list_View.get(5);
}
}

public class Activity {

private void setFormInfo(){
LinearLayout linearLayout=(LinearLayout)activity.findViewById(l inearLayoutId);
List<View> list_View = ArrayList<View>();
list_View.add((EditText)linearLayout.findViewById( R.id.editText2))
list_View.add((EditText)linearLayout.findViewById( R.id.editText3))
list_View.add((EditText)linearLayout.findViewById( R.id.editText4))
list_View.add((CheckBox)linearLayout.findViewById( R.id.checkBox))
list_View.add((Button)linearLayout.findViewById(R. id.button2)))
FormInfo form = new FormInfo(list_View);
form.show();
}
}

kamran_14
دوشنبه 15 بهمن 1397, 10:18 صبح
ممنون از جوابتون
پس ما اگر activity.findViewById بنویسیم هم میشه فقط انگار محدوده جستجو بیشتره و با linearlayout.findViewById میشه محدوده را کوچکتر کرد

farhad_shiri_ex
دوشنبه 15 بهمن 1397, 11:16 صبح
ممنون از جوابتون
پس ما اگر activity.findViewById بنویسیم هم میشه فقط انگار محدوده جستجو بیشتره و با linearlayout.findViewById میشه محدوده را کوچکتر کرد

ربطی به هم ندارن! البته اگر منظورتون را درست متوجه شده باشم!
الان شی LinearLayout یک container layout هست که در لایه اصلی اکتیویتی تعریف تعریف شده است. بنابراین برای دسترسی به ویجت های داخل این Linear حتما باید از طریق این شی به ویجت ها دسترسی پیدا کنید در FindViewBYId اکتیویتی فقط به خود کانتینر Linear دسترسی دارید.
و البته در مثالهای بالا توضیح دادم که کپی ها غیر ضروری از ویجت ها در اندروید خیلی زیاد بر روی performance تاثیر داره! پس تا جای ممکن باید از ایجاد کپی های اضافی جلوگیری کنید تا هم بازدهی بهتر باشد وهم از weak reference ها در جهت کمینه کردن وابستگی ها استفاده کنید!