我添加了具有编辑字段的动态线性布局,现在我想从这些编辑字段中获取文本。这是我动态添加布局的代码
linearLayoutForm = (LinearLayout) findViewById(R.id.linearLayoutForm);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final LinearLayout newView = (LinearLayout)getLayoutInflater().inflate(R.layout.single_skill_row, null);
newView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
ImageButton btnRemove = (ImageButton) newView.findViewById(R.id.btnRemove);
btnRemove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
linearLayoutForm.removeView(newView);
}
});
linearLayoutForm.addView(newView,0);
}
});
我试图用这段代码获取文本,但我得到了空指针异常。
register_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LinearLayout et2=(LinearLayout) linearLayoutForm.getChildAt(linearLayoutForm.getChildCount());
EditText e = (EditText) et2.getChildAt(et2.getChildCount());
String s=e.getText().toString();
});
这是single_skill_row的XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rowdetail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText
android:id="@+id/editDescricao"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.62"
android:ems="10"
android:inputType="text"
android:maxLines="1">
<!--<requestFocus />-->
</EditText>
<ImageButton
android:id="@+id/btnRemove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/btn_remove"
android:src="@drawable/ic_remove_black_18dp" />
</LinearLayout>
答案 0 :(得分:0)
您可以使用findViewById
实现这一目标register_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LinearLayout et2=(LinearLayout) linearLayoutForm.getChildAt(linearLayoutForm.getChildCount());
EditText e = (EditText) et2.findViewById(R.id.editDescricao);
String s=e.getText().toString();
});
答案 1 :(得分:0)
你可以这样做:
在课堂上首先添加一个字段:
...
EditText myEditText;
...
然后在添加linearLayout之后,将editText存储在字段中,如下所示:
...
final LinearLayout newView = (LinearLayout)getLayoutInflater().inflate(R.layout.single_skill_row, null);
myEditText = newView.findViewById(R.id.editDescricao);
...
之后在按钮的onClick回调中你可以得到它的文字:
register_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = myEditText.getText().toString();
});
答案 2 :(得分:0)
你可以简单地这样做:
首先创建一个特殊的行布局,以便以编程方式轻松添加它,然后以这种方式工作:
private LinearLayout parentLinearLayout;
private List<View> rowViewList = new ArrayList<View>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_meeting);
parentLinearLayout = findViewById(R.id.parent_linear_layout);
}
/** 在这里,您在按钮上添加 onClick ="onAddField",直接在您的布局中 在这个方法中发生的事情是你膨胀了你的 LinearLayout,你添加了你之前用 id 创建的特殊行布局,最后,你将这个新视图添加到 rowViewList(列表)上,然后将此视图添加到你声明的 LinearLayout 中开头*/
public void onAddField(View v) {
LayoutInflater inflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView = inflater.inflate(R.layout.your_row_you_want_to_add, null);
rowViewList.add(rowView);
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount());
}
/** 在这里,您在布局中添加按钮 onClick="getText" 创建您的视图视图、您的 Edittext 和您的字符串,它将获取所有文本,您只需要遍历您之前创建的列表 rowViewList*/
public void getText(View view) {
View viewRow;
EditText editText;
String allEditText = "";
for (int i = 0; i<rowViewList.size(); i++){
viewRow = rowViewList.get(i);
editText = viewRow.findViewById(R.id.mail_edit_text);
allEditText = allEditText + ", " + editText.getText().toString();
}
}
希望对你有帮助