动态创建textview,让它显示一个变量的值
Create textview dynamically and let it show the value of a variable
我要完成的是:
每次我单击一个 Button 时,它都应该创建一个新的 TextView,这个新创建的 TextView 将在我单击该 Button 时显示 EditText 的值。
例如:如果我在 EditText 中写入 "This" 并单击 Button,它应该创建一个显示 "This" 的 TextView。如果我然后在同一个 EditText 中写入 "works" 并按下按钮,它应该创建第二个显示 "works".
的 TextView
让我向您展示我的尝试:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ausgabe);
Button b = (Button)findViewById(R.id.erstellButton);
ll = (LinearLayout)findViewById(R.id.LL);
layoutParams = new LinearLayout.LayoutParams
(layoutParams.WRAP_CONTENT, layoutParams.WRAP_CONTENT);
b.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
et = (EditText) findViewById(R.id.editText3);
TextView view = new TextView(AusgabeActivity.this);
ll.addView(view, layoutParams);
String plsJustWork = et.getText().toString();
view.setText(++i+"test" +plsJustWork);
}
});
现在,如果我使用这段代码,每次单击按钮时都会创建一个新的 TextView,但它只显示“1test”,下次单击按钮时它会显示“2test”。所以EditText(editText3/et)的值没有显示出来。
试试这个
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button b;
int i = 0;
EditText et;
LinearLayout ll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.editText3);
b = (Button) findViewById(R.id.erstellButton);
ll = (LinearLayout) findViewById(R.id.LL);
final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String plsJustWork = et.getText().toString();
if (TextUtils.isEmpty(plsJustWork)) {
et.setError("Please Enter Value");
et.requestFocus();
} else {
TextView view = new TextView(MainActivity.this);
ll.addView(view, layoutParams);
view.setText(++i + " test " + plsJustWork);
et.setText("");
}
}
});
}
}
使用下面的代码..
public class Demo extends AppCompatActivity {
LinearLayout ll;
LinearLayout.LayoutParams layoutParams;
EditText et;
int i = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo);
Button b = (Button) findViewById(R.id.daBtnSubmit);
ll = (LinearLayout) findViewById(R.id.demo);
layoutParams = new LinearLayout.LayoutParams
(layoutParams.WRAP_CONTENT, layoutParams.WRAP_CONTENT);
et = findViewById(R.id.daEtData);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!TextUtils.isEmpty(et.getText().toString().trim())) {
TextView view = new TextView(Demo.this);
ll.addView(view, layoutParams);
view.setText(++i + " test " + et.getText().toString().trim()); // if not create every time then remove i value.
et.setText("");
et.setError(null);
} else {
et.setError("Please Enter text");
}
}
});
}
}
您可以使用 listView 或 recylerview 来实现相同的目的。这是执行此操作的代码
public class MainActivity extends BaseActivity {
ArrayList<String> arrayList;
EditText etEditText;
Button btButton;
ListView lvListView;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
setAdapter();
setClickListener();
}
private void setClickListener() {
btButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!etEditText.getText().toString().isEmpty()) {
arrayList.add(etEditText.getText().toString());
if (adapter != null)
adapter.notifyDataSetChanged();
}
}
});
}
private void initUI() {
etEditText = findViewById(R.id.etEditText);
btButton = findViewById(R.id.btButton);
lvListView = findViewById(R.id.lvListView);
}
private void setAdapter() {
arrayList = new ArrayList<>();
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, arrayList);
lvListView.setAdapter(adapter);
}
}
添加 activity_main 是
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/etEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ClickMe"
app:layout_constraintTop_toBottomOf="@+id/etEditText" />
<ListView
android:id="@+id/lvListView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/btButton" />
</android.support.constraint.ConstraintLayout>
我要完成的是:
每次我单击一个 Button 时,它都应该创建一个新的 TextView,这个新创建的 TextView 将在我单击该 Button 时显示 EditText 的值。
例如:如果我在 EditText 中写入 "This" 并单击 Button,它应该创建一个显示 "This" 的 TextView。如果我然后在同一个 EditText 中写入 "works" 并按下按钮,它应该创建第二个显示 "works".
的 TextView让我向您展示我的尝试:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ausgabe);
Button b = (Button)findViewById(R.id.erstellButton);
ll = (LinearLayout)findViewById(R.id.LL);
layoutParams = new LinearLayout.LayoutParams
(layoutParams.WRAP_CONTENT, layoutParams.WRAP_CONTENT);
b.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
et = (EditText) findViewById(R.id.editText3);
TextView view = new TextView(AusgabeActivity.this);
ll.addView(view, layoutParams);
String plsJustWork = et.getText().toString();
view.setText(++i+"test" +plsJustWork);
}
});
现在,如果我使用这段代码,每次单击按钮时都会创建一个新的 TextView,但它只显示“1test”,下次单击按钮时它会显示“2test”。所以EditText(editText3/et)的值没有显示出来。
试试这个
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button b;
int i = 0;
EditText et;
LinearLayout ll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.editText3);
b = (Button) findViewById(R.id.erstellButton);
ll = (LinearLayout) findViewById(R.id.LL);
final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String plsJustWork = et.getText().toString();
if (TextUtils.isEmpty(plsJustWork)) {
et.setError("Please Enter Value");
et.requestFocus();
} else {
TextView view = new TextView(MainActivity.this);
ll.addView(view, layoutParams);
view.setText(++i + " test " + plsJustWork);
et.setText("");
}
}
});
}
}
使用下面的代码..
public class Demo extends AppCompatActivity {
LinearLayout ll;
LinearLayout.LayoutParams layoutParams;
EditText et;
int i = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.demo);
Button b = (Button) findViewById(R.id.daBtnSubmit);
ll = (LinearLayout) findViewById(R.id.demo);
layoutParams = new LinearLayout.LayoutParams
(layoutParams.WRAP_CONTENT, layoutParams.WRAP_CONTENT);
et = findViewById(R.id.daEtData);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!TextUtils.isEmpty(et.getText().toString().trim())) {
TextView view = new TextView(Demo.this);
ll.addView(view, layoutParams);
view.setText(++i + " test " + et.getText().toString().trim()); // if not create every time then remove i value.
et.setText("");
et.setError(null);
} else {
et.setError("Please Enter text");
}
}
});
}
}
您可以使用 listView 或 recylerview 来实现相同的目的。这是执行此操作的代码
public class MainActivity extends BaseActivity {
ArrayList<String> arrayList;
EditText etEditText;
Button btButton;
ListView lvListView;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
setAdapter();
setClickListener();
}
private void setClickListener() {
btButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!etEditText.getText().toString().isEmpty()) {
arrayList.add(etEditText.getText().toString());
if (adapter != null)
adapter.notifyDataSetChanged();
}
}
});
}
private void initUI() {
etEditText = findViewById(R.id.etEditText);
btButton = findViewById(R.id.btButton);
lvListView = findViewById(R.id.lvListView);
}
private void setAdapter() {
arrayList = new ArrayList<>();
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, arrayList);
lvListView.setAdapter(adapter);
}
}
添加 activity_main 是
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/etEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ClickMe"
app:layout_constraintTop_toBottomOf="@+id/etEditText" />
<ListView
android:id="@+id/lvListView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/btButton" />
</android.support.constraint.ConstraintLayout>