2011-06-13 110 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

相关问题