4

edittext と-/+ボタンを含むリストビューがあります。ボタンをクリックすると、インクリメント/デクリメントのような edittext 値が変更されます。

5のような値を設定してリストビューをスクロールすると、edittext の値が 0 のようなデフォルト値として設定されます。

私はこのように使用しています

public View getView(final int position, View convertView,ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View connection;
        final ViewHolder holder;
        connection = new View(context);         
        connection = inflater.inflate(R.layout.list_row_modified, null);
        holder = new ViewHolder();
        holder.up = (Button) connection.findViewById(R.id.btn_plus);
        holder.down = (Button) connection.findViewById(R.id.btn_minus);
        holder.date = (TextView) connection.findViewById(R.id.text_date);

        //onClick with holder.up/holder.down

        connection.setTag(holder);
        return connection;
    }
4

2 に答える 2

0

ViewHolder パターンを正しく使用していません。EditText を含む小さなリストがあるため、それは必要ありません。

ミロスが言ったように、リスト項目がリサイクルされるため、getView()呼び出されたときに値が0に設定されます。値への参照を保持し、getView()メソッドで設定する必要があります。

于 2013-01-23T12:12:00.737 に答える
0

あなたの場合の問題は、リストビューを開くたびに getView が呼び出されることですが (これは問題ありません)、上下にスクロールするときにも呼び出されます。メモリ使用量を減らすために、リストビューはリストビューの表示部分の外側にあるすべての要素を破棄し、スクロールバックするとそれらを再度作成します。

したがって、それを回避するには、次を使用できます。

if (convertView == null) {
    holder = new ViewHolder();
    holder.up = (Button) connection.findViewById(R.id.btn_plus);
    holder.down = (Button) connection.findViewById(R.id.btn_minus);
    holder.date = (TextView) connection.findViewById(R.id.text_date);  
}

convertView.setTag(holder);
return convertView;

リストビュー内に編集テキストを作成する方法の詳細なチュートリアルについては、 http ://vikaskanani.wordpress.com/2011/07/27/android-focusable-edittext-inside-listview/ を参照してください。

于 2013-01-23T12:04:53.380 に答える