使用按钮动态添加新行
问题描述:
我试图在单击按钮时在列表视图中添加行,但是我的应用程序每次都会崩溃。 这里是我的代码:使用按钮动态添加新行
public class MTCRichGraphicsActivity extends Activity {
int ELEMENT_COUNT = 3;
int position=0;
Button bAddView;
String[] elements = new String[ELEMENT_COUNT];
int r =0 ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bAddView = (Button) findViewById(R.id.bNewEvent);
final ListView list = (ListView) findViewById(R.id.list3d);
bAddView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.bNewEvent :
for (int i = 0; i< ELEMENT_COUNT; i++) {
elements[i] = String.valueOf(i);
}
final MyAdapter adapter = new MyAdapter(MTCRichGraphicsActivity.this,elements);
adapter.notifyDataSetChanged();
//list.setScrollY(currentPosition);
//list.setTranslationY(currentPosition);
list.setDivider(null);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
ELEMENT_COUNT = ELEMENT_COUNT + 3;
}
}
});
}
}
在这里,我想每次加3行的按钮(即bNewEvent)被点击,所以我通过3每次递增ELEMENT_COUNT。它第一次正常工作,但是当我第二次按下按钮时,它会崩溃。
这里是我的适配器类:
public class MyAdapter extends BaseAdapter {
private final LayoutInflater mInflater;
private final String[] mItems;
TextView t;
ViewHolder holder;
public MyAdapter(Activity c,String[] objects) {
mInflater = c.getLayoutInflater();
mItems = objects;
}
public int getCount() {
return mItems.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView t;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listitem2, parent,false);
}
holder = new ViewHolder();
holder.t1 = (TextView) convertView.findViewById(R.id.tv1);
holder.t2 = (TextView) convertView.findViewById(R.id.tv2);
holder.t3 = (TextView) convertView.findViewById(R.id.tv3);
holder.t4 = (TextView) convertView.findViewById(R.id.tv4);
holder.t1.setText("Title"+position);
position = position + 3;
//((ImageView)convertView).setTextAlignment(1);
return convertView;
}
@Override
public Object getItem(int position) {
return mItems[position];
}
@Override
public long getItemId(int position) {
return position;
}
}
答
你不能用一个这样的数组..
String[] elements = new String[ELEMENT_COUNT];
导致阵列具有相同数量的元素作为ELEMENT_COUNT的初始值,则不能仅将ELEMENT_COUNT增加3并尝试
for (int i = 0; i< ELEMENT_COUNT; i++) {
elements[i] = String.valueOf(i);
}
由于数组只包含最初定义的元素数量。您需要将“元素”更改为ArrayList。
ArrayList<string> elements;
+0
thankyou它工作:) – Jaycee 2013-03-26 06:04:00
答
ü定义
int ELEMENT_COUNT = 3;
String[] elements = new String[ELEMENT_COUNT];
但你不能调整阵列
for (int i = 0; i< ELEMENT_COUNT; i++) {
elements[i] = String.valueOf(i);
}
此所以你长了异常
更改数组列表
像
List<String> element =new ArrayList<String>();
for (int i = 0; i< ELEMENT_COUNT; i++) {
element.add("String.valueOf(i)")
}
和更改适配器也是这样
您能不能告诉我们您的logcat的? – 2013-03-25 12:12:52
使用集合类而不是像列表 这样的数组,您不能在运行时增加数组的大小,它的不可变 – 2013-03-25 12:17:38
@Premsuraj是对的。你必须使用arraylist而不是数组,因为arraylist不需要初始化元素的数量。 – 2013-03-25 12:27:42