جلسه هشتم اندروید شروع ۶ صبح پایان ۹:۱۸- دریافت اطلاعات از فرم
دریافت اطلاعات وارد شده در فرم
دو راه:
۱- تو همون جاوا یه کلاس اضافه کنی و بنویسی تو واقعیت با فرگمنت می کنیم اینا آموزشیه فقط
باگ استاد نوشت android:layout_centerInParent=“true” ولی برا من نمیشه. چرا؟
جواب: چون لیوت من رو constrained بوده وقتی بذاریش relative layout درست میشه
موقه استفاده از intent باید ایمپورت شود import android.content.Intent;
xml فرم(good.xml) این فرمو جلسه قبل ساختیم
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/forminfo" android:layout_width="match_parent" android:orientation="vertical" android:layout_margin="15dp" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal"> <EditText android:id="@+id/inputphone" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="3" android:hint="phone" android:maxLength="11" android:inputType="phone" /> <EditText android:id="@+id/inputname" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="7" android:hint="Name" android:inputType="textPersonName" /> </LinearLayout> <CheckBox android:id="@+id/cbshare" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:checked="true" android:text="Share my number" /> <View android:id="@+id/view" android:layout_width="match_parent" android:layout_height="2dp" android:background="@color/colorPrimary" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal"> <EditText android:id="@+id/inputemail" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:hint="email" android:inputType="textEmailAddress" /> <ImageView android:id="@+id/imageView" android:layout_marginTop="5dp" android:layout_width="80dp" android:layout_height="40dp" android:layout_weight="1" android:scaleType="fitXY" app:srcCompat="@drawable/email" /> </LinearLayout> <Button android:id="@+id/btsub" style="@style/Widget.AppCompat.Button.Colored" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Submit" /> <View android:id="@+id/view2" android:layout_width="match_parent" android:layout_height="2dp" android:background="@android:color/holo_orange_dark" /> </LinearLayout>
بعدش یه java هم براش می سازیم: (FormInfo.java) می زنی new>Java Class
نکته مهم در این کد intent هست intent ها ماموریت انجام میدن وقتی میخوایم یه چیزی رو از یه activity بفرستیم به یکی دیگه یه intent می فرستیم. بعد اینا می تونن فقط برن باعث شن activity بعدی باز شه یا این که یه اطلاعاتی هم با خودشون ببرن. اون اطلاعاته extra هستن
نکته بعدی email.split( میاد string رو بر اساس اون چیزی که تو پرانتز ورودی بهش میدیم تبدیل می کنه به تعدادی آرایه. ینی هر جا رسید به اون ورودی، string رو می شکنه
package ir.ben.hassan; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; public class FormInfo implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { private Activity activity; private LinearLayout forminfo; private Context context; private EditText inputname; private EditText inputphone; private EditText inputemail; private CheckBox cbshare; private Button btsub; public FormInfo(Activity activity,int layoutId) { this.activity=activity; forminfo=activity.findViewById(layoutId);//here the instructor did a cast (LinearLayout) this.activity=activity; init(); } private void init() { if(forminfo==null) return; inputname=forminfo.findViewById(R.id.inputname);//here the instructor did a cast (EditText) inputphone=forminfo.findViewById(R.id.inputphone); inputemail=forminfo.findViewById(R.id.inputemail); cbshare=forminfo.findViewById(R.id.cbshare); btsub=forminfo.findViewById(R.id.btsub); btsub.setOnClickListener(this); cbshare.setOnCheckedChangeListener(this); } @Override public void onClick(View v) { if(v.getId()==btsub.getId()) { String email=inputemail.getText().toString().trim(); String phone=inputphone.getText().toString().trim(); String name=inputname.getText().toString().trim(); if(isvalidinput(name,phone,email)) { Toast.makeText(activity, "Valid Input", Toast.LENGTH_SHORT).show(); Intent intent=new Intent(activity,two.class); intent.putExtra("name",name); intent.putExtra("email",email); if(cbshare.isChecked()) intent.putExtra("phone",phone); activity.startActivity(intent); } } } private boolean isvalidinput(String name,String phone,String email) { if (name.length() < 3) { Toast.makeText(activity, "Name should be at least 3 characters", Toast.LENGTH_SHORT).show(); inputname.requestFocus(); return false; } if (cbshare.isChecked() && !phone.isEmpty() && (phone.length() != 11 || !phone.startsWith("09"))) { Toast.makeText(activity, "Wrong mobile number", Toast.LENGTH_SHORT).show(); inputphone.requestFocus(); return false; } if (!email.contains("@") || (email.lastIndexOf('.') < email.indexOf('@')) || email.split("@").length>2) { Toast.makeText(activity, "Wrong email address", Toast.LENGTH_SHORT).show(); inputemail.requestFocus(); return false; } return true; } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(buttonView.getId()==cbshare.getId()) { inputphone.setEnabled(isChecked); } } }
تو activity main.xml آخرش یه فرم include شده
<include layout="@layout/good" android:id="@+id/forminfo"/>
تو mainactivity java :
setContentView(R.layout.activity_main);
FormInfo form=new FormInfo(this,R.id.forminfo);
تو activity _two xml فقط یه textview با آیدی tv2 هست
تو javaش:
package ir.ben.hassan; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.DragStartHelper; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class two extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); TextView tv= findViewById(R.id.tv2);//alt+2enter to cast Toast.makeText(this, "hey", Toast.LENGTH_SHORT).show(); Bundle extras=getIntent().getExtras(); if(extras!=null) { Toast.makeText(this, "extra", Toast.LENGTH_SHORT).show(); String email=""; String phone=""; String name=""; if(extras.containsKey("email")) email=extras.getString("email"); if(extras.containsKey("phone")){ phone=extras.getString("phone").substring(2);\\substring from char 2 to end } if(extras.containsKey("name")) name=extras.getString("name"); tv.setText("name: "+name+"\n"); tv.append("email: "+email+"\n"); tv.append("phone: "+phone+"\n"); } else Toast.makeText(this, "no extra", Toast.LENGTH_SHORT).show(); } }