PDA

View Full Version : فراخوانی کلاس در اکتیویتی



bijar985
شنبه 06 مرداد 1397, 21:11 عصر
سلام دوستان ممنون میشم لطف کنید یه راهنمایی کنید
من یک فرم را درست کردم بعد میخام در mainactivity کلاس آن فرم را صدا بزنم ولی داده داخل کلا س ننمیاد وارور میده
mainactivitiy

public class MainActivity extends AppCompatActivity {
TextView tv;
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
در این قسمت فراخوانی کردم Form_test form = new Form_test(this, R.id.layout_form_info);


file form_test

public class form_test implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
private Activity activity;
private LinearLayout layoutForminfo;
private EditText inputName;
private EditText inputEmail;
private EditText inputphone;
private CheckBox cbSharephone;
private Button btnsubmit;
public form_test(Activity activity,int layoutid){
this.activity = activity;
اطلاعات فرم وارد این قسمت نمیشه layoutForminfo = activity.findViewById(layoutid);
init();
}

farhad_shiri_ex
یک شنبه 07 مرداد 1397, 02:42 صبح
سلام دوستان ممنون میشم لطف کنید یه راهنمایی کنید
من یک فرم را درست کردم بعد میخام در mainactivity کلاس آن فرم را صدا بزنم ولی داده داخل کلا س ننمیاد وارور میده
mainactivitiy

public class MainActivity extends AppCompatActivity {
TextView tv;
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
در این قسمت فراخوانی کردم Form_test form = new Form_test(this, R.id.layout_form_info);


file form_test

public class form_test implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
private Activity activity;
private LinearLayout layoutForminfo;
private EditText inputName;
private EditText inputEmail;
private EditText inputphone;
private CheckBox cbSharephone;
private Button btnsubmit;
public form_test(Activity activity,int layoutid){
this.activity = activity;
اطلاعات فرم وارد این قسمت نمیشه layoutForminfo = activity.findViewById(layoutid);
init();
}

اگر پیغام خطا را پست میکردید بهتر بود!
ولی در هر حال نباید مشکلی باشه وقتی دارید اکتیویتی را از طریق DI تزریق میکنید باید به راحتی به همه لایه هایی که در setContentView اکتیویتی کلاس اصلی مشخص کردید باید در کلاسی هم که در ترکیب شرکت داره دسترسی داشته باشه مگر اینکه نوع R.id.layout_form_info که دارید ارسال میکنید از نوع LinearLayout نباشه یعنی باید در لایه اصلیR.layout.activity_main هم نوعش LinearLayout باشه!
والبته اون متد init() هم چون پیاده سازیش را نذاشتید نمی دونم ایراد داره یا خیر!

bijar985
یک شنبه 07 مرداد 1397, 09:31 صبح
اگر پیغام خطا را پست میکردید بهتر بود!
ولی در هر حال نباید مشکلی باشه وقتی دارید اکتیویتی را از طریق DI تزریق میکنید باید به راحتی به همه لایه هایی که در setContentView اکتیویتی کلاس اصلی مشخص کردید باید در کلاسی هم که در ترکیب شرکت داره دسترسی داشته باشه مگر اینکه نوع R.id.layout_form_info که دارید ارسال میکنید از نوع LinearLayout نباشه یعنی باید در لایه اصلیR.layout.activity_main هم نوعش LinearLayout باشه!
والبته اون متد init() هم چون پیاده سازیش را نذاشتید نمی دونم ایراد داره یا خیر!

سلام از توجهتون ممنونم
اینمerror
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.payam.fristproject/com.example.payam.fristproject.MainActivity}: java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.LinearLayout

Caused by: java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.LinearLayout
at com.example.payam.fristproject.form_test.<init>(form_test.java:22)
at com.example.payam.fristproject.MainActivity.onCrea te(MainActivity.java:28)

تابع init()


private void init() {
if(LayoutFormInfo == null){
return;
}
inputName = (EditText) LayoutFormInfo.findViewById(R.id.input_name);
inputEmail = (EditText) LayoutFormInfo.findViewById(R.id.input_email);
inputphone = (EditText) LayoutFormInfo.findViewById(R.id.input_phone1);
cbshare = (CheckBox)LayoutFormInfo.findViewById(R.id.checkBo x1);
btnSubmit =(Button) LayoutFormInfo.findViewById(R.id.submit);
btnSubmit.setOnClickListener(this);
cbshare.setOnCheckedChangeListener(this);
}

farhad_shiri_ex
دوشنبه 08 مرداد 1397, 00:37 صبح
android.widget.RelativeLayout cannot be cast to android.widget.LinearLayout

در پست قبلی هم که عرض کردم دارید یک layout که از نوع LinearLayout هست را فراخوانی میکنید در صورتی که در لایه اصلی فرم نوع R.id.layout_form_info این کنترل RelativeLayout هست نوع ها را یکی کنید مشکل رفع میشه!