2011-06-13 8 views
2

私はテキストビュー、editText、およびボタンを行に持つカスタムのlistViewを持っています。 listViewはアダプタで作成されます。
ボタンを押したときにeditTextに入力された値でtextViewを更新したいとします。 リスト全体を更新せずにこれを実行したいです。
アイデアリストから行を1つだけ更新する方法はありますか?
ありがとうございます!カスタムリストの項目からtextViewを更新するAndroidビュー

私は、コードを提供します、より明確にする:

プライベート静的クラスEfficientAdapterはBaseAdapter { プライベートLayoutInflater mInflaterを拡張。 コンテキストmyContext;

public EfficientAdapter(Context context) { 
     mInflater = LayoutInflater.from(context); 
     myContext = context; 
    } 

    public int getCount() { 
     return nameList.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

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

    public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.travelpassengers_item, 
        null); 
      holder = new ViewHolder();    
      holder.ratingTv = (TextView) convertView 
        .findViewById(R.id.tvTPRating);    

      holder.rateBtn = (Button) convertView 
        .findViewById(R.id.btnTPRate); 
      holder.plusBtn = (Button) convertView 
        .findViewById(R.id.btnPlus); 
      holder.minusBtn = (Button) convertView 
        .findViewById(R.id.btnMinus); 
      holder.rateEt = (EditText) convertView 
        .findViewById(R.id.etTPRating); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.ratingTv.setText(rating[position] + "/10"); 

     holder.callBtn.setTag(phoneList[position]); 

     holder.ratingBtn.setTag(ids[position]); 
     holder.ratingDisableBtn.setTag(numberRates[position]); 
     holder.ratingTv.setTag(rating[position]); 
     holder.rateEt.setTag(position);   

     holder.rateBtn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub     
         String id = holder.ratingBtn.getTag().toString(); 
         int position = Integer.parseInt(holder.rateEt 
           .getTag().toString()); 
         double oldRate = Double 
           .parseDouble(rating[position]); 
         int number = numberRates[position]; 
         double newRate = Double.parseDouble(holder.rateEt 
           .getText().toString()); 

         DecimalFormat oneDigit = new DecimalFormat(
           "#,##0.0"); 
         number++; 
         double avg = (oldRate + newRate)/number; 
         newRate = Double.valueOf(oneDigit.format(avg)); 
        // I want to put the value from newRate in the holder.ratingTv on right position without updating entire listView.     

       } 
      } 
     }); 

     holder.plusBtn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       int rate = Integer.parseInt(holder.rateEt.getText() 
         .toString()); 
       if (rate < 10) { 
        rate++;  
      holder.rateEt.setText(Integer.toString(rate)); 
       } 
      } 
     }); 

     holder.minusBtn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       int rate = Integer.parseInt(holder.rateEt.getText() 
         .toString()); 
       if (rate > 0) { 
        rate--;   
     holder.rateEt.setText(Integer.toString(rate)); 
       } 
      } 
     }); 

     return convertView; 
    } 

    static class ViewHolder {   
     public TextView ratingTv;  
     public Button minusBtn, plusBtn; 
     public EditText rateEt; 
     public Button rateBtn;   
    } 
} 

答えて

1
TextView tv = (TextView) getViewById(R.id.myTextView); 
EditText et = (EditText) getViewById(R.id.myEditText); 
Button b = (Button) getViewById(R.id.myButton); 
b.setOnClickListener(new OnClickListener(){ 
    public void onClick(View v) { 
     tv.setText(et.getText()); 
    } 
}); 

私は(そのような文字列へのCharSequenceからのキャストとして)それをテストしていませんので、これは、いくつかの調整が必要な場合があります。

+0

実際のビューが表示されていることを確認してください。このアプローチは、リストがスクロールするときに同じテキストビューが繰り返しリサイクルされるので、奇妙な動作を引き起こす可能性があります。 –

+0

変更したい実際のビューを取得する方法がわかりません。 – addru

+0

アクティビティのonCreateメソッドには、 'setContentView(R.layout.main); 'などの行があります。これは、アクティビティのビューを設定する行です。このxmlファイル(res/layout/main.xmlの場所)には、textview、edittext、およびbuttonが必要です。あなたは 'android:id =" @ + id/myTextView "'のようなオブジェクトの名前を設定するために 'android:id'属性を使うことができます – Phil

関連する問題