2016-06-12 78 views
0

在主類中,我有一個ListView和一個EditText。 ListView使用自定義的BaseAdapter幷包含將在每行顯示的多個項目。 我想使用像TextWatcher,這將允許我在EditText中輸入一些數字,並且該輸入將顯示在ListView的其中一項中。EditText使用TextWatcher更新ListView上的項目

請參閱下面的代碼的一些部分,以解釋更好的我的問題。

主類:

... 
etAmount = (EditText) findViewById(R.id.edt_text); 
lvDisplay = (ListView) findViewById(R.id.listView_display); 
... 
CustomAdapter adapter = new CustomAdapter(this, menuList, new CustomAdapter.onDoneClick() { 
    @Override 
    public void onClick(View v, int position) {} 
    }); 
lvDisplay.setAdapter(adapter); 
... 

CustomAdapter類別:

... 
public CustomAdapter(Context context, List<MenuModel> objects, onDoneClick listener) { 
    this.context = context; 
    this.menuList = objects; 
    this.mListener = listener; 
} 

public interface onDoneClick{ 
    void onClick(View v, int position); 
} 

@Override 
public int getCount() { 
    return menuList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return menuList.get(position); 
} 

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

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    View view = convertView; 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (view == null) { 
     holder = new ViewHolder(); 
     view = inflater.inflate(R.layout.item_layout, parent, false); 
     holder.tvFirst = (TextView) view.findViewById(R.id.item1); 
     holder.tvSecond = (TextView) view.findViewById(R.id.item2); 
     holder.tvThird = (TextView) view.findViewById(R.id.item3); 
    } else { 
     holder = (ViewHolder) view.getTag(); 
    } 

    final MenuModel item = menuList.get(position); 

    if (item != null) { 
     holder.tvFirst.setText(item.getName()); 
     holder.tvSecond.setText(item.getRate()); 
    } 

    return view; 
} 

static class ViewHolder { 
    TextView tvFirst; 
    TextView tvSecond; 
    TextView tvThird; 
} 

我的目標是對的EditText輸入一些數字(例如100),這個數字將通過tvSecond的值相乘,然後在tvThird中顯示最終值。

您的幫助將不勝感激。

回答

1

我希望我能夠正確理解這種情況,但您可以在CustomAdapter中添加實例變量tvThirdText。現在,將文本觀察器添加到EditText etAmountafterTextChanged(Editable text)方法集tvThirdText中,並將其添加到適配器上,並調用notifyDataSetChanged()。最後一次更改必須在getView()方法中,您必須將holder.tvThird設置爲正確的值。這裏有完整的代碼來幫助你。

主類:

 etAmount.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

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

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      adapter.tvThirdText = Integer.parseInt(s.toString().trim()); 
      adapter.notifyDataSetChanged(); 
     } 
    }); 

適配器類別:

public int tvThirdText; //can make this private and add setter method if needed 
... 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
... 
    if (item != null) { 
     holder.tvFirst.setText(item.getName()); 
     holder.tvSecond.setText(item.getRate()); 
     holder.tvThird.setText(tvThirdText * item.getRate()); 
    } 
+0

你好@Sahith,感謝您的參與以上,這就是我一直在尋找。 但是,我碰到了更多的挑戰。 讓我把它作爲下面的答案發布。 –