Add edittext in scrollview ScrView.addView(tab)
Trouble is adding multi Edit Text Views
-
08-10-2022 - |
Pregunta
I am trying to add five Edit Text Views on the click of a button in a Scroll View. But when i am clicking the button, the Edit Text View appearing is not in the Scroll View but in the Main Linear Layout.
What to do, for Edit Text View to get appear in Scroll View.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/tv_editmessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tv_editMessage" />
<EditText
android:id="@+id/et_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textMultiLine"
android:text="@string/et_messageToSend" >
<requestFocus />
</EditText>
<ScrollView
android:layout_width="match_parent"
android:id="@+id/ScrView"
android:layout_height="0dp"
android:layout_weight="1" >
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:ems="10"
android:hint="@string/et_display" >
</EditText>
</ScrollView>
<Button
android:id="@+id/bpickperson"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/b_pick" />
<Button
android:id="@+id/balert"
android:layout_width="288dp"
android:layout_height="wrap_content"
android:text="@string/b_alert" />
<Button
android:id="@+id/baddmorecontacts"
android:layout_width="288dp"
android:layout_height="wrap_content"
android:text="@string/b_addmorecontacts" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" >
<Button
android:id="@+id/b_facebook"
android:layout_width="144dp"
android:layout_height="wrap_content"
android:text="@string/b_facebook" />
<Button
android:id="@+id/b_twitter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/b_twitter" />
</LinearLayout>
</LinearLayout>
MainActivity
public class MainActivity extends Activity implements LocationListener {
String separator = "; ";
private Button btn_cntct;
public int REQUESTCODE = 1;
private LinearLayout layoutLinear;
private Button btn_addmore_cntct;
int temp;
ScrollView ScrView;
Context c = MainActivity.this;
Button b_alert;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// defining button elements for picking contacts from phone-book
btn_cntct = (Button) findViewById(R.id.bpickperson);
btn_cntct.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
// using Intent for fetching contacts from phone-book
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
startActivityForResult(intent, REQUESTCODE);
}
});
// defining button and edit-text values for adding mutli edit-texts
// views
temp = 1;
layoutLinear = (LinearLayout) findViewById(R.id.mLayout);
ScrView = (ScrollView)findViewById(R.id.ScrView);
btn_addmore_cntct = (Button) findViewById(R.id.baddmorecontacts);
btn_addmore_cntct.setOnClickListener(OnClick());
EditText editview = new EditText(this);
editview.setText("Add more");
}
// implementing OnClickListener OnClick() method for "btn_addmore_cntct"
// button
private OnClickListener OnClick() {
// TODO Auto-generated method stub
// changing return type "null" to "new OnClickListner"
return new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (temp <= 2) {
EditText tab = new EditText(getApplicationContext());
tab.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
tab.setEnabled(false);
tab.setFocusable(false);
// layoutLinear.addView(tab,0);
ScrView.addView(tab,0);
temp++;
} else {
// Print message to user Cant add more editText.
Toast.makeText(getApplicationContext(), "No More Contacts",
Toast.LENGTH_SHORT).show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
Uri uri = data.getData();
Log.i("data", uri.toString());
if (uri != null) {
Cursor c = null;
try {
c = getContentResolver()
.query(uri,
new String[] {
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE },
null, null, null);
if (c != null && c.moveToFirst()) {
String name = c.getString(0);
String number = c.getString(1);
int type = c.getInt(2);
showSelectedNumber(name, number, type);
}
} finally {
if (c != null) {
c.close();
}
}
}
}
}
// defining showSelectedNummber to display selected contact from phone-book
// to Edit-Text View
String selectedNum = " ";
public void showSelectedNumber(String name, String number, int type) {
if (layoutLinear == null) {
Log.i("layoutLinear is null", "null");
} else {
Log.i("layoutLinear is not null", "not null");
}
EditText userNumber = (EditText) layoutLinear.getChildAt(0);
if (userNumber == null) {
Log.i("edittext is null", "null");
} else {
Log.i("edittext is not null", "not null");
}
String typeNumber = (String) ContactsContract.CommonDataKinds.Phone
.getTypeLabel(getResources(), type, "");
// preventing number duplicacy and raising toast
if (selectedNum.contains(number)) {
// do nothing
// alert user that number is already selected
Toast.makeText(getApplicationContext(),
"Selected Contact Already Exists", Toast.LENGTH_SHORT)
.show();
} else
userNumber.setText(name + ":" + number + " " + typeNumber);
selectedNum = selectedNum + number;
}
}
LogCat
02-07 11:44:46.116: D/AndroidRuntime(1281): Shutting down VM
02-07 11:44:46.116: W/dalvikvm(1281): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-07 11:44:46.126: E/AndroidRuntime(1281): FATAL EXCEPTION: main
02-07 11:44:46.126: E/AndroidRuntime(1281): java.lang.IllegalStateException: ScrollView can host only one direct child
02-07 11:44:46.126: E/AndroidRuntime(1281): at android.widget.ScrollView.addView(ScrollView.java:220)
02-07 11:44:46.126: E/AndroidRuntime(1281): at com.example.zzz1.MainActivity$4.onClick(MainActivity.java:157)
02-07 11:44:46.126: E/AndroidRuntime(1281): at android.view.View.performClick(View.java:2485)
02-07 11:44:46.126: E/AndroidRuntime(1281): at android.view.View$PerformClick.run(View.java:9080)
02-07 11:44:46.126: E/AndroidRuntime(1281): at android.os.Handler.handleCallback(Handler.java:587)
02-07 11:44:46.126: E/AndroidRuntime(1281): at android.os.Handler.dispatchMessage(Handler.java:92)
02-07 11:44:46.126: E/AndroidRuntime(1281): at android.os.Looper.loop(Looper.java:123)
02-07 11:44:46.126: E/AndroidRuntime(1281): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-07 11:44:46.126: E/AndroidRuntime(1281): at java.lang.reflect.Method.invokeNative(Native Method)
02-07 11:44:46.126: E/AndroidRuntime(1281): at java.lang.reflect.Method.invoke(Method.java:507)
02-07 11:44:46.126: E/AndroidRuntime(1281): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-07 11:44:46.126: E/AndroidRuntime(1281): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-07 11:44:46.126: E/AndroidRuntime(1281): at dalvik.system.NativeStart.main(Native Method)
Solución
Otros consejos
ScrollView must have a child layout to add any view to it.
Add your textview to the linear layout Add a LinearLayout to Scrollview. Add scrollview to your parent layout
This is the xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainl"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/scLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
</LinearLayout>
This is the activity java class
LinearLayout l,scl;
Button b1;
EditText e1,e2,e3,e4,e5;
ScrollView sv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
l = (LinearLayout) findViewById(R.id.mainl);
scl=(LinearLayout) findViewById(R.id.scLay);
sv=(ScrollView)findViewById(R.id.scrollView1);
b1=(Button)findViewById(R.id.button1);
e1=new EditText(this);
e2=new EditText(this);
e3=new EditText(this);
e4=new EditText(this);
e5=new EditText(this);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
scl.addView(e1);
scl.addView(e2);
scl.addView(e3);
scl.addView(e4);
scl.addView(e5);
}
});
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow