我希望动态显示多个按钮,每行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();
}
});
}
...
答案 0 :(得分:0)
您正在使用LinearLayout
中的R.id.mainLinear
。如果此布局的方向为vertical
,则每个按钮将显示在下一个添加的下方。您还要在每次迭代时添加新的R.id.mainLinear
。在调用while
循环之前,可能需要调用主布局。
在主LinearLayout
(垂直)内使用LinearLayout
(水平)。将按钮添加到水平LinearLayout
。这应该可以纠正这个问题。
虽然这应该可以解决问题,但您应该考虑使用ListView
并为按钮定义自定义视图。使用数据适配器用您需要的信息填充按钮。您可以更好地控制外观和功能。您的代码将来也会更容易更改。
最后,我建议您不要像现在这样从文件中读取数据。在检查.readLine
声明中的有效性之前,您有三次while
次呼叫。这可能会导致错误。