0

私はEclipseを使用してAndroidアプリケーションを開発しています。リストビューがあり、この各行には EditText が含まれています。EditText をクリックすると、2 つのことを行う必要があります。

1: データ配列からのテキストを含むすべての EditText をリロードします。

2: クリックされた EditText のテキストを定数文字列 (「0」など) に設定します。

このために、EditText に以下の onclicklisetner を使用しました。

  myEdittext.setOnClickListener(new View.OnClickListener() 
{
     @Override
      public void onClick(View v) 
       {
        adapter.notifyDataSetChanged();//adapter is my arrayadapter of the listview
        EditText clickedText = (EditText)v;  
        clickedText.setText("0");
       }
 });

ご覧のとおり、「notifyDataSetChanged」メソッドを使用してリストビューの EditText をリロードし、「setText」メソッドを使用してクリックされた EditText のテキストを「0」に設定しています。

しかし、「setText」メソッドは機能していません。「adapter.notifyDataSetChanged()」という行にコメントを付けると、「setText」メソッドが機能しています。

また、遅延後に setText メソッドを呼び出してこれを実行しようとしましたが (notifyDataSetChanged が新しいスレッドを開始しているかどうかを確認するため)、失敗しました。

onClick メソッドで両方のメソッドを機能させるにはどうすればよいですか。

前もって感謝します。

4

2 に答える 2

0

試す :

したがって、このような動作の理由は、adapter.notifyDataSetChanged() を呼び出すと、View V がリサイクルされる可能性が高く、クリックされたものを参照しなくなるためです。本当にやりたいことは、リストを変更して、notifyDataSetChanged が呼び出されたときにすべての値がそれに応じてロードされるようにすることです。

アダプターコードを共有してください。

  myEdittext.setOnClickListener(new View.OnClickListener() 
{
     @Override
      public void onClick(View v) 
       {
        //adapter is my arrayadapter of the listview
        //EditText clickedText = (EditText)v;  
        //clickedText.setText("0");

         //Do some thing to change the adapter data list.
         adapter.notifyDataSetChanged();
       }
 });
于 2013-02-11T08:51:55.920 に答える
0

別のアプローチを使用してそれを行うことができます。

ArrayListたとえば、 mListを使用して ListView アダプターを設定している可能性があります。

リスト ビューのonItemClickリスナーで、 でクリックされた項目の位置を取得しますListView。たとえば、arrayList のその位置のonClick()値を設定します。そして、notifyDataChanged() を呼び出します0mList.set(position, 0)

于 2013-02-11T08:48:35.010 に答える