归志宁无五亩园,读书本意在元元。这篇文章主要讲述在Android应用程序中向GridView添加一组按钮相关的知识,希望能为你提供帮助。
我有一个应用程序,将有5-15个按钮,具体取决于后端可用的内容。如何定义正确的GridView布局文件以包含一组按钮,每个按钮都有不同的文本和其他属性?每个按钮实际上都会将一个项目添加到购物车,因此onClick代码将是相同的,除了它添加到购物车的项目。
【在Android应用程序中向GridView添加一组按钮】如何定义一个数组,以便我可以添加可变数量的按钮,但仍然用唯一的ID引用它们?我已经看过arrays.xml的例子,但是他们已经创建了一个预先设置的字符串数组。我需要一种方法来创建一个对象,而不是在布局或数组xml文件中定义文本。
更新 - 添加有关添加到GridView的信息
我想将它添加到GridView中,因此调用[addView方法](http://developer.android.com/reference/android/widget/AdapterView.html#addView(android.view.View,%20int)会导致UnsupportedOperationException。我可以执行以下操作:
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);
但这并没有像我想的那样在网格中布局按钮。这可以在GridView中完成吗?
答案在以下代码中,您应该将
for
的上限更改为变量。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);
} // forsuper.setContentView(layout);
} // ()public void onClick(View view) {
((Button) view).setText("*");
((Button) view).setEnabled(false);
}
} // class
另一答案这是一个很好的样本:
https://developer.android.com/guide/topics/ui/layout/gridview.html
您应该在getView适配器方法中创建按钮而不是imageview。
另一答案如果您正在使用GridView或ListView(等),并且正在生成视图以通过适配器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很好)
推荐阅读
- 按钮onClickListener无法在Android中播放声音
- 如何在android中更改切换按钮颜色
- 后退按钮 - Android工作室
- 在android中动态添加按钮的问题
- 为什么Android Chrome中的边框会消失()
- 使用Live Id从Universal App登录到Web Api
- 为什么'src'出现在Angular App的地址栏中()
- 使用EF Database-First Application部署ASP.NET Web API
- 尝试从asp.net web api调用获取响应时android studio中的超时异常