2013-03-25 69 views
0

我试图在单击按钮时在列表视图中添加行,但是我的应用程序每次都会崩溃。 这里是我的代码:使用按钮动态添加新行

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; 
} 

}

+0

您能不能告诉我们您的logcat的? – 2013-03-25 12:12:52

+1

使用集合类而不是像列表 这样的数组,您不能在运行时增加数组的大小,它的不可变 – 2013-03-25 12:17:38

+0

@Premsuraj是对的。你必须使用arraylist而不是数组,因为arraylist不需要初始化元素的数量。 – 2013-03-25 12:27:42

回答

0

你不能用一个这样的数组..

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

0

ü定义

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)") 
      } 

和更改适配器也是这样