2013-03-25 68 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)") 
      } 

和更改適配器也是這樣