我需要在android中动态创建edittext字段。我已经浏览了link并为其编写了按钮单击操作。那是当我点击按钮时,必须显示复选框。但是当我在onclick动作中创建checkbox对象时,它显示错误。
有人可以告诉我为什么会出现错误?
我的代码:
public class InflationActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ScrollView sv = new ScrollView(this);
final LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);
TextView tv = new TextView(this);
tv.setText("Dynamic layouts ftw!");
ll.addView(tv);
EditText et = new EditText(this);
et.setText("weeeeeeeeeee~!");
ll.addView(et);
Button b = new Button(this);
b.setText("I don't do anything, but I was added dynamically. :)");
ll.addView(b);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for(int i = 0; i < 20; i++) {
CheckBox ch = new CheckBox(this);
ch.setText("I'm dynamic!");
ll.addView(ch);
}
}
});
this.setContentView(sv);
}
}
答案 0 :(得分:26)
只需将听众改为(完全正常,我已经尝试过):
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
for(int i = 0; i < 20; i++) {
CheckBox cb = new CheckBox(getApplicationContext());
cb.setText("I'm dynamic!");
ll.addView(cb);
}
}
});
请注意以下两项更改:
View.OnClickListener
至OnClickListener
new CheckBox(this)
至new CheckBox(getApplicationContext())
答案 1 :(得分:1)
CheckBox ch = new CheckBox(this);
将(此)更改为新的CheckBox(您的活动名称.this);因为如果你传递了它,它将不会占用你的活动的上下文,因为你在点击监听器中编写了这一行。
答案 2 :(得分:0)
CheckBox ch = new CheckBox(this);
“这个”不是活动,而是听众。您可以使用InflationActivity.this
但应该使用getApplicationContext();或getBaseContext()。
如果您遇到运行时错误,必须包含日志文件中的堆栈跟踪。如果您的项目无法完成,只需将其更改为我建议的内容即可。
答案 3 :(得分:0)
从这个问题开始几年了,但要求没有改变......这就是我在API 22上如何工作的方式。稍有不同的是我在一个主要的上面有一个浮动动作按钮(fab)布局和内容布局,这是我动态创建LinearLayout的地方。
注意:
b.setOnClickListener(new View.OnClickListener()
和
CheckBox ch = new CheckBox(v.getContext());
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
content_main.xml
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main"
tools:layout_editor_absoluteY="81dp"
tools:layout_editor_absoluteX="0dp">
</android.support.constraint.ConstraintLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ViewGroup layout = (ViewGroup) findViewById(R.id.layout_id);
ScrollView sv = new ScrollView(this);
final LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);
TextView tv = new TextView(this);
tv.setText("Dynamic layouts! Plain Text");
ll.addView(tv);
EditText et = new EditText(this);
et.setText("This is edit text");
ll.addView(et);
Button b = new Button(this);
b.setText("This is a dynamically added button");
ll.addView(b);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for(int i = 0; i < 20; i++) {
CheckBox ch = new CheckBox(v.getContext());
ch.setText("I'm dynamic! "+i);
ll.addView(ch);
}
}
});
//this.setContentView(sv); // this causes the fab to fail
layout.addView(sv);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
答案 4 :(得分:0)
尝试:
holder.checkbox.performClick();