0

私の問題はちょっと奇妙です...基本的に、上記のようなListViewがあります:

<ListView
    android:id="@+id/listViewMenu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/order_button"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" >

</ListView>

そのために、要素を次のように定義しました。

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.7">

        <TextView android:id="@+id/name"
          android:textSize="14sp"
          android:textStyle="bold"
          android:textColor="#0033CC"
          android:layout_marginLeft="10sp"
          android:layout_marginTop="5sp"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
        />

        <TextView android:id="@+id/price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />

        <TextView android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />

    </LinearLayout>

    <EditText
        android:id="@+id/quantityEdit"
        android:layout_height="85dp"
        android:layout_width="85dp"
        android:textSize="12sp"
        android:textColor="#0033CC"
        android:layout_marginRight="15dp"
        android:layout_weight="0.3"
        android:inputType="number"
        android:ems="10"
        android:hint="@string/quantity_show">

        <requestFocus />
    </EditText>

    </LinearLayout>

これは私の新しい編集済みのアダプターです

public MyCustomBaseAdapter(Context context, ArrayList<Product> products) {
         this.products = products;
         this.mInflater = LayoutInflater.from(context);

         for (int i=0;i<products.size();i++){
             editTextsVlues.add("");
         }
     }

     public int getCount() {
         return products.size();
     }

     public Object getItem(int position) {
         return products.get(position);
     }

     public long getItemId(int position) {
         return position;
     }

     public View getView(int position, View convertView, ViewGroup parent) {

         ViewHolder holder;

         if (convertView == null) {
             convertView = mInflater.inflate(R.layout.product_item, null);
             holder = new ViewHolder();
             holder.quantity = (EditText) convertView.findViewById(R.id.quantityEdit);
             holder.picView = (ImageView) convertView.findViewById(R.id.pic_view);

             convertView.setTag(holder);
         } else {
             holder = (ViewHolder) convertView.getTag();
         }



         holder.quantity.setText(editTextsVlues.get(position));

         holder.picView.setImageBitmap(products.get(position).getPicture());

         positionListener = position;

         holder.quantity.addTextChangedListener(new TextWatcher() {

             @Override
             public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                 // When user changed the Text
                 editTextsVlues.set(positionListener, cs.toString());
             }

             @Override
             public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                     int arg3) {
                 // TODO Auto-generated method stub

             }

             @Override
             public void afterTextChanged(Editable arg0) {
                 // TODO Auto-generated method stub

             }
         });

         return convertView;
     }


} 

私が直面している問題は、リストにさらに多くの要素がある場合 (画面にすべて収まらない場合)、EditText に値を入力すると、下から別の EditText が入力されていることです...なぜそれはハプニング...?インターネット上で同様のケースは見つかりませんでした。

EDTI: サム 私はあなたのアプローチを試しました..しかし、私のプログラミングスキルはあまり良くありません...アダプタの問題は何だと思いますか?...値を入力し、その編集テキストにフォーカスを失うと、それは単にそれを削除します...:(

EDIT2: この Web サイトのチュートリアルは、私の問題を解決するのに役立ちました: http://vikaskanani.wordpress.com/2011/07/27/android-focusable-edittext-inside-listview/ TextWatcher を使用せずに

4

1 に答える 1

1

EditTextに値を入力すると、下から別のEditTextが入力されます...なぜそれが起こっているのですか...?

ListView は各行のレイアウトをリサイクルします。このように考えてみてください: 約 10 行を使用でき、それらが画面からスクロールされた後に単純に再利用できるのに、なぜ 1000 の一意のレイアウト (非常に遅い) があるのでしょうか? この概念は、 Turbo Charge your UIおよびその他の Google I/O プレゼンテーションで詳しく説明されています。これらは一見の価値があります。

とにかく、解決策は簡単です。各 EditText の内容をアダプタに保存し、TextView 文字列を復元するのと同じ方法で値を復元します。


添加

それ、どうやったら出来るの?:)

アダプタに新しいメンバーを追加します。

private List<String> editTexts = new ArrayList<String>(); // Please think of a better name :)

TextWatcherを使用して各 EditText への変更を記録し、これらの文字列をこのリストに保存します。次にgetView()、値を次のように復元します。

holder.quantity.setText(editTexts.get(position));
于 2013-04-13T15:49:30.760 に答える