我尝试使用一个Button
开发一个简单的Android应用,每次点击都会生成新的TextViews
。
import android.app.Activity;
import android.os.Bundle;
import android.text.Layout;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class CreateTV extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mCreate = (Button)findViewById(R.id.btnCreate);
mCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
((Button) v).setText("Clicked");
TextView mTV1 = new TextView(this);
}
});
}
}
我的代码错误是因为:
TextView mTV1 = new TextView(this);
我可以找到some similar examples,它在onCreate()
中以编程方式生成对象。但我想在onClick()
中生成和修改新对象。
请问有人帮忙吗?
答案 0 :(得分:2)
更改
TextView mTV1 = new TextView(this);
到
TextView mTV1 = new TextView(CreateTV.this);
答案 1 :(得分:1)
正如您在documentation中所看到的,TextView
需要创建上下文。 TextView(Context context)
由于您尝试在TextView
内创建ClickListener
,因此无法使用this
作为对Context
扩展对象的引用。
正如McAdam331指出的那样,使用new TextView(getActivity)
,这是有效的,因为Activity
扩展了Context
。
答案 2 :(得分:0)
除了将TextView mTV1 = new TextView(this);
更改为TextView mTV1 = new TextView(CreateTV.this);
之外,您还必须在TextView
中添加view
,如下所示:
import android.app.Activity;
import android.os.Bundle;
import android.text.Layout;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class CreateTV extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mCreate = (Button)findViewById(R.id.btnCreate);
mCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
((Button) v).setText("Clicked");
TextView mTV1 = new TextView(CreateTV.this);
addContentView(mTV1);
}
});
}
}
答案 3 :(得分:0)
我更希望添加一个Context,将其设置为final,然后使用Context调用Textview。
示例:
public class CreateTV extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mCreate = (Button)findViewById(R.id.btnCreate);
final Context mContext = this;
mCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
((Button) v).setText("Clicked");
TextView mTV1 = new TextView(mContext);
addContentView(mTV1);
}
});
}
}
如果要在onCreate方法之外(以及在Listeners中)使用Context,可以定义一个Context。
private Context context;
public void onCreate(....) {
this.context = this;
}
private void aMethod() {
context....
}
另一种方式做这么酷的东西。创建一个类并通过Application扩展它。
public class MainApplication extends Application {
public static Context getContext() { return this; }
}
然后将MainApplication添加到您的Manifest。
<application
android:name=".MainApplication"
>
使用MainApplication.getContext();
从任何地方访问它