Android:在Asyn onPostExecute中动态添加按钮

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

我正在尝试调用一个方法,该方法在AsyncTask的PostExecute方法上动态生成按钮。onPostExecute结果可能类似于分割此结果时的S~D~W~H~H~a。我需要动态创建按钮

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