在Android应用程序中向GridView添加按钮数组
我有一个应用程序,将有5-15个按钮,这取决于什么是从后端可用。如何定义适当的GridView布局文件以包含一组按钮,每个按钮都具有不同的文本和其他属性?每个按钮基本上都会将一个项目添加到购物车中,因此onClick代码除了添加到购物车中的项目之外都是相同的 如何定义一个数组,以便添加数量可变的按钮,但仍然通过唯一的ID引用每个按钮?我见过的例子,但他们已经创建了一个预设字符串数组。我需要一种方法来创建一个对象,而不是在布局或数组xml文件中定义文本 更新-添加有关添加到GridView的信息 我想将其添加到GridView,因此调用[addView方法](会导致不支持的操作异常。我可以执行以下操作:在Android应用程序中向GridView添加按钮数组,android,arrays,button,dynamic,android-gridview,Android,Arrays,Button,Dynamic,Android Gridview,我有一个应用程序,将有5-15个按钮,这取决于什么是从后端可用。如何定义适当的GridView布局文件以包含一组按钮,每个按钮都具有不同的文本和其他属性?每个按钮基本上都会将一个项目添加到购物车中,因此onClick代码除了添加到购物车中的项目之外都是相同的 如何定义一个数组,以便添加数量可变的按钮,但仍然通过唯一的ID引用每个按钮?我见过的例子,但他们已经创建了一个预设字符串数组。我需要一种方法来创建一个对象,而不是在布局或数组xml文件中定义文本 更新-添加有关添加到GridView的信息
ImageButton b2 = new ImageButton(getApplicationContext());
b2.setBackgroundResource(R.drawable.img_3);
android.widget.LinearLayout container = (android.widget.LinearLayout) findViewById(R.id.lay);
container.addView(b2);
但这并不像我希望的那样在网格中布局按钮。这可以在网格视图中完成吗?这是一个很好的示例:
您应该在getView adapter方法中创建按钮而不是ImageView。如果您使用的是GridView或ListView(etc),并通过适配器getView(pos、convertView、viewGroup)生成视图来填充它们,您可能会遇到混乱(我曾经这样做过) 如果决定重新使用convertView参数,则必须重置其中的所有内容。它是框架传递给您的旧视图,以节省增加布局的成本。它几乎从未与以前在布局中的位置相关联
class GridAdapter extends BaseAdapter // assigned to your GridView
{
public View getView(int position, View convertView, ViewGroup arg2) {
View view;
if (convertView==null)
{
view = getLayoutInflater().inflate(R.layout.gd_grid_cell, null);
}
else
{
// reusing this view saves inflate cost
// but you really have to restore everything within it to the state you want
view = convertView;
}
return view;
}
// other methods omitted (e.g. getCount, etc)
}
我认为这代表了Android的一个特点,一开始这个概念有点难理解,直到你意识到它有一个显著的优化(必须对小型移动设备上的CPU很好)在下面的代码中,你应该将
的上限改为一个变量
public class MainActivity
extends Activity
implements View.OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TableLayout layout = new TableLayout (this);
layout.setLayoutParams( new TableLayout.LayoutParams(4,5) );
layout.setPadding(1,1,1,1);
for (int f=0; f<=13; f++) {
TableRow tr = new TableRow(this);
for (int c=0; c<=9; c++) {
Button b = new Button (this);
b.setText(""+f+c);
b.setTextSize(10.0f);
b.setTextColor(Color.rgb( 100, 200, 200));
b.setOnClickListener(this);
tr.addView(b, 30,30);
} // for
layout.addView(tr);
} // for
super.setContentView(layout);
} // ()
public void onClick(View view) {
((Button) view).setText("*");
((Button) view).setEnabled(false);
}
} // class
公共类活动
扩展活动
实现View.OnClickListener{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
TableLayout layout=新的TableLayout(本);
layout.setLayoutParams(新的TableLayout.LayoutParams(4,5));
布局。设置填充(1,1,1,1);
对于(int f=0;f