如何动态地在android中的每一行添加2个按钮?

时间:2017-05-22 22:54:59

标签: android dynamic-programming

我希望动态显示多个按钮,每行2个按钮。 我试了一下tablerow并在其中放了一个linearLayout但是uttons并没有显示出来。 我到目前为止所做的事情只给了按钮下的按钮...... that's what i want to achieve     void read(){

  File file = getCacheDir();
   File file1 = new File(file,"favoris.txt");
   BufferedReader reader;
   FileInputStream fileInputStream = null;
   try {

       fileInputStream = new FileInputStream(file1);
       StringBuffer stringBuffer = new StringBuffer();
       reader = new BufferedReader(new InputStreamReader(fileInputStream));
       String line=reader.readLine();
       while (line != null) {
           LinearLayout mainLinear=(LinearLayout) findViewById(R.id.mainLinear);
          LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(
                   LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
           ImageButton ib=new  ImageButton(this);
           Button b=new Button(this);
           b.setLayoutParams(params);
           ib.setLayoutParams(params);
           final int id=Integer.parseInt(line);
           b.setId(id);
           //ib.setId(id);
           line = reader.readLine();
           b.setText(line);
           line = reader.readLine();
           b.setText(b.getText()+"\n"+line);
           line = reader.readLine();

           Picasso.with(this).load("https://omaimaelair.000webhostapp.com/images/img"+id+".jpg").into(ib);

           mainLinear.addView(b);
           mainLinear.addView(ib);

           b.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   Toast.makeText(FavorisActivity.this,id+"", Toast.LENGTH_SHORT).show();
               }
           });
       }

   ...

1 个答案:

答案 0 :(得分:0)

您正在使用LinearLayout中的R.id.mainLinear。如果此布局的方向为vertical,则每个按钮将显示在下一个添加的下方。您还要在每次迭代时添加新的R.id.mainLinear。在调用while循环之前,可能需要调用主布局。

在主LinearLayout(垂直)内使用LinearLayout(水平)。将按钮添加到水平LinearLayout。这应该可以纠正这个问题。

虽然这应该可以解决问题,但您应该考虑使用ListView并为按钮定义自定义视图。使用数据适配器用您需要的信息填充按钮。您可以更好地控制外观和功能。您的代码将来也会更容易更改。

最后,我建议您不要像现在这样从文件中读取数据。在检查.readLine声明中的有效性之前,您有三次while次呼叫。这可能会导致错误。