0

Edittext の値を ListView に保存しようとしても機能しますが、ListView が大きすぎる場合、1 つの edittext を編集しているときに、リストビューをスクロールすると、別の EditText が同時に編集されます... 私はしません 'どうすればいいのかわからず、6 時間を無駄にしましたが、何も得られませんでした。誰かが私を助けることができれば、お願いします。

これは、カスタム リストビューの getView のコードです。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final int position2 = position;
        View v = convertView;
        final ViewHolder holder;

        if(v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.lista_item_prepedido, null);

            holder = new ViewHolder();

            holder.codi = (TextView) v.findViewById(R.id.NomProducte);
            holder.nom = (EditText) v.findViewById(R.id.Preu);
            holder.eliminar = (ImageButton) v.findViewById(R.id.delete);
            View eliminarPrepedido = (ImageButton) v.findViewById(R.id.delete);

            if(blocClients.equals("0"))
            {
                eliminarPrepedido.setVisibility(View.GONE);
                holder.nom.setFocusable(false);
            }


            v.setTag(holder);

            holder.nom.setText(items.get(position).getNom());
            holder.nom.addTextChangedListener(new TextWatcher(){

                @Override
                public void afterTextChanged(Editable s) {


                }

                @Override
                public void beforeTextChanged(CharSequence s, int start,
                        int count, int after) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onTextChanged(CharSequence s, int start,
                        int before, int count) {



                    items.get(position2).Nom = s.toString();



                    String preu = items.get(position2).Nom;
                    String nomproducte = items.get(position2).Codic;
                    int position = position2;

                    //mostrarMensaje("Valor: "+preu+"  Nom Producte: "+nomproducte+"  CodiClient: " +CodicClient+ " posicio: "+position);
                    baseDatos = openOrCreateDatabase(nombreBD, MODE_WORLD_WRITEABLE, null);

                    String sqlStr = "UPDATE estadistiques SET ultimpreu = '" +preu+"' WHERE codic_client='"+CodicClient+"' AND desc_article = '"+nomproducte+"' ";
                    baseDatos.execSQL(sqlStr);

                    try {
                        fnGlobal.CreaSincroFitxer(sqlStr);
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    baseDatos.close();
                }


            });


        } else {
            holder = (ViewHolder) v.getTag();

        }


        holder.codi.setText(items.get(position).getCodic());


        holder.eliminar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                final int position = position2;
                String CodicClient = null;
                Bundle extras = getIntent().getExtras();
                CodicClient = extras.getString("codiClientTab");
                String nomproducte = items.get(position).Codic;
                int Opcio = 1;


                baseDatos = openOrCreateDatabase(nombreBD, MODE_WORLD_WRITEABLE, null);
                String sqlStr = "DELETE FROM estadistiques WHERE codic_client ='"+CodicClient+"' AND desc_article ='"+nomproducte+"'" ;
                baseDatos.execSQL(sqlStr);

                try {
                    fnGlobal.CreaSincroFitxer(sqlStr);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                baseDatos.close();

                notifyDataSetChanged();

                onResume();

            }

        });





        return v;
    }
}

リストビューのカスタム XML アイテム

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/rounded_rectangle"
    android:orientation="horizontal"
    android:padding="6dip" >

    <ImageButton
        android:id="@+id/delete"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginRight="6dp"
        android:layout_marginTop="15dp"
        android:background="@drawable/delete" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <EditText
            android:id="@+id/Preu"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/NomProducte"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="5dp"
            android:background="@color/white"
            android:ellipsize="end"
            android:gravity="right"
            android:inputType="numberDecimal"
            android:singleLine="true"
            android:text="nom"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/NomProducte"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/Preu"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="5dp"
            android:layout_weight="0.16"
            android:clickable="false"
            android:ellipsize="end"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:singleLine="true"
            android:text="codi"
            android:textColor="#000000"
            android:textSize="18sp" />

    </RelativeLayout>

</LinearLayout>

どうもありがとう!:)

4

1 に答える 1

0

私があなたの問題を理解していれば、これを常に理解しやすい方法で動作させるのは非常に難しいでしょう. これを実装する方法を変更して、2 つの情報を表示する ListView に 2 つの TextView を配置することをお勧めします。編集可能なものがタップされると、情報を編集するためのダイアログが表示されます。ユーザーはリストビューを移動する前にそれを受け入れるかキャンセルする必要があり、何が起こっているのかを明確にします。要約すると、次のことをお勧めします。

  • NomProducte は、現在設定されている TextView になります。
  • NomProducte の onTouch をキャッチして、画像、Preu テキストを TextView、NomProducte テキストを EditText として表示するダイアログを表示します。
  • ユーザーはそこにデータを入力します。
  • OK -> 新しいテキスト アクションを受け入れる
  • キャンセル -> 新しいテキスト アクションを無視します。
于 2013-03-15T12:05:18.593 に答える