Android:在Asyn onPostExecute中动态添加按钮
我正在尝试调用一个方法,该方法在AsyncTask的PostExecute方法上动态生成按钮。onPostExecute结果可能类似于分割此结果时的S~D~W~H~H~a。我需要动态创建按钮Android:在Asyn onPostExecute中动态添加按钮,android,Android,我正在尝试调用一个方法,该方法在AsyncTask的PostExecute方法上动态生成按钮。onPostExecute结果可能类似于分割此结果时的S~D~W~H~H~a。我需要动态创建按钮 private TextView textView; LinearLayout layout; Button btn; List<String> elements; @Override protected voi
private TextView textView;
LinearLayout layout;
Button btn;
List<String> elements;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.TextView01);
layout= (LinearLayout) findViewById(R.id.layoutFor);
}
private class ExecuteTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
@Override
protected void onPostExecute(String result) {
elements = Arrays.asList(result.split("~"));
generateButtonDynamically();
}
}
public void onClick(View view) {
ExecuteTask task = new ExecuteTask ();
task.execute(new String[] {"url"});
}
public void generateButtonDynamically()
{
for (int i = 0; i < elements.size(); i++) {
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.layoutFor);
Button btn = new Button(this);
btn.setText(elements.get(i));
linearLayout.addView(btn);
}
}
private TextView TextView;
线性布局;
按钮btn;
列出要素;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(textView)findViewById(R.id.TextView01);
布局=(线性布局)findViewById(R.id.layoutFor);
}
私有类ExecuteTask扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…URL){
字符串响应=”;
for(字符串url:url){
DefaultHttpClient=新的DefaultHttpClient();
HttpGet HttpGet=新的HttpGet(url);
试一试{
HttpResponse execute=client.execute(httpGet);
InputStream内容=execute.getEntity().getContent();
BufferedReader buffer=新的BufferedReader(新的InputStreamReader(内容));
字符串s=“”;
而((s=buffer.readLine())!=null){
响应+=s;
}
}捕获(例外e){
e、 printStackTrace();
}
}
返回响应;
}
@凌驾
受保护的void onPostExecute(字符串结果){
elements=Arrays.asList(result.split(“~”);
动态生成按钮();
}
}
公共void onClick(视图){
ExecuteTask=新的ExecuteTask();
执行(新字符串[]{“url”});
}
public void generateButtonDynamicly()
{
对于(int i=0;i
在GenerateButtonDynamic方法中。我正在尝试动态生成按钮并显示。但是没有发生。您已经在
onCreate()
中找到了线性布局。在方法generatebuttondynamic()
中使用相同的方法,您已经在onCreate()
中通过引用布局找到了线性布局。在方法generatebuttondynamic()
中使用相同的方法,您已经在onCreate()
中通过引用布局找到了线性布局。在方法generatebuttondynamic()
中使用相同的方法,您已经在onCreate()
中通过引用布局找到了线性布局。在方法generateButtonDynamic()
中使用相同的方法,不需要在onPostExecute()方法中再次查找线性布局的id。您已经全局声明了
另一件事是设置按钮和检查的布局参数
for (int i = 0; i < elements.size(); i++) {
Button btn = new Button(YourActivity.this);
btn.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btn.setGravity(Gravity.CENTER | Gravity.RIGHT);
btn.setText(elements.get(i));
linearLayout.addView(btn);
}
for(int i=0;i
无需在onPostExecute()方法中再次查找线性布局的id。您已经全局声明了
另一件事是设置按钮和检查的布局参数
for (int i = 0; i < elements.size(); i++) {
Button btn = new Button(YourActivity.this);
btn.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btn.setGravity(Gravity.CENTER | Gravity.RIGHT);
btn.setText(elements.get(i));
linearLayout.addView(btn);
}
for(int i=0;i
无需在onPostExecute()方法中再次查找线性布局的id。您已经全局声明了
另一件事是设置按钮和检查的布局参数
for (int i = 0; i < elements.size(); i++) {
Button btn = new Button(YourActivity.this);
btn.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btn.setGravity(Gravity.CENTER | Gravity.RIGHT);
btn.setText(elements.get(i));
linearLayout.addView(btn);
}
for(int i=0;i
无需在onPostExecute()方法中再次查找线性布局的id。您已经全局声明了
另一件事是设置按钮和检查的布局参数
for (int i = 0; i < elements.size(); i++) {
Button btn = new Button(YourActivity.this);
btn.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btn.setGravity(Gravity.CENTER | Gravity.RIGHT);
btn.setText(elements.get(i));
linearLayout.addView(btn);
}
for(int i=0;i
我不知道你是否已经解决了。试着改变
Button btn = new Button(this);
在
我想在那一刻,这个指向ExecuteTask类,而不是Con