2011-06-13 109 views
2

我有一個自定義listView與textView,editText和一行上的按鈕。 listView是使用適配器創建的。
我想用editText中輸入的值更新textView,當我按下按鈕時。 我想在不刷新整個列表的情況下執行此操作。
任何ideea如何更新列表中只有一行?
謝謝!從自定義列表視圖中的項目更新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

確保您獲得所需的實際視圖。這種方法可能會導致奇怪的行爲,因爲當列表滾動時,相同的文本視圖會一遍又一遍地被回收。 – 2011-06-13 18:18:10

+0

我不知道如何獲得我想要修改的實際視圖。 – addru 2011-06-16 16:41:03

+0

在你的activity的onCreate方法中,有一行,如'setContentView(R.layout.main);'這是設置你的活動視圖的行。在這個xml文件(res/layout/main.xml中的位置)中,你應該有你的textview,edittext和button。你可以使用屬性'android:id'來設置對象的名字(比如'android:id =「@ + id/myTextView」') – Phil 2011-06-17 18:32:25

相關問題