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

        }
    });

}

}

ここでは、ボタン (つまり bNewEvent) がクリックされるたびに 3 行を追加したいので、毎回 ELEMENT_COUNT を 3 ずつ増やしています。最初は問題なく動作しますが、2 回目にボタンを押すとクラッシュします。

ここに私のアダプタクラスがあります:

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

}

4

2 に答える 2

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;
于 2013-03-25T12:24:18.130 に答える
0

U定義

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

および変更アダプターもこのように

于 2013-03-25T12:29:57.003 に答える