Я хочу использовать горизонтальный набор номера, поэтому я сделал его пользовательским виджетами. В адаптере, когда я нажимаю кнопку пользовательского виджета и устанавливаю счет, я хочу изменить текст в адаптере EditText
.Когда я нажал кнопку, я хочу изменить текст editText с помощью настраиваемого компонента в адаптере
Это мой пользовательский компонент
HorizontalNumberPicker.java
public class HorizontalNumberPicker extends LinearLayout {
Button plus;
Button minus;
EditText num;
int count;
OnCustomEventListener mListener;
public HorizontalNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.horizontal_number_picker, this);
plus = (Button) findViewById(R.id.btn_plus);
minus = (Button) findViewById(R.id.btn_minus);
num = (EditText) findViewById(R.id.edit_text);
plus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (num.getText().toString().equals("10")) {
if (mListener != null)
mListener.onEvent(count);
return;
} else {
count = Integer.parseInt(num.getText().toString()) + 1;
num.setText(String.valueOf(count));
if (mListener != null)
mListener.onEvent(count);
}
}
});
minus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (num.getText().toString().equals("0")) {
if (mListener != null)
mListener.onEvent(count);
return;
} else {
count = Integer.parseInt(num.getText().toString()) - 1;
num.setText(String.valueOf(count));
if (mListener != null)
mListener.onEvent(count);
}
}
});
}
public interface OnCustomEventListener {
public abstract void onEvent(int count);
}
public void setCustomEventListener(OnCustomEventListener eventListener) {
mListener = eventListener;
}
}
Это мой заказ адаптер
private Context context;
LayoutInflater inflater;
View itemView;
ArrayList<MenuItemData> list;
// Declare Variables
NetworkImageView iv_menu_img = null;
TextView tv_menu_name = null;
TextView tv_menu_price = null;
// Progress dialog
private ProgressDialog pDialog;
int price;
//imageloader using volley
ImageLoader mImageLoader;
HorizontalNumberPicker pick_menu_grid;
public MenuListGridAdapter(Context context, ArrayList<MenuItemData> list, ProgressDialog pDialog) {
this.context = context;
this.list = new ArrayList<MenuItemData>();
this.list.addAll(list);
this.pDialog = pDialog;
//image loader
mImageLoader = AppController.getInstance().getImageLoader();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.menulist_grid_item, parent, false);
iv_menu_img = (NetworkImageView) itemView.findViewById(R.id.iv_menu_img);
tv_menu_name = (TextView) itemView.findViewById(R.id.tv_menu_name);
tv_menu_price = (TextView) itemView.findViewById(R.id.tv_menu_price);
pick_menu_grid = (HorizontalNumberPicker)itemView.findViewById(R.id.pick_menu_grid);
} else {
itemView = (View) convertView;
}
// Set the result into ImageView
iv_menu_img.setImageUrl(url + list.get(position).getImageFilePathIndex(), mImageLoader);
// Set the results into TextViews
tv_menu_name.setText(list.get(position).getMenuCHNName());
tv_menu_price.setText(list.get(position).getMenuPrice());
//set price to listener
if(list.get(position).getMenuPrice().equals("")){
price = 0;
}
pick_menu_grid.setCustomEventListener(new HorizontalNumberPicker.OnCustomEventListener() {
@Override
public void onEvent(int count) {
list.get(position).setCount(count);
price = Integer.parseInt(list.get(position).getMenuPrice());
tv_menu_price.setText(String.valueOf(price*count));
notifyDataSetChanged();
}
});
pDialog.dismiss();
return itemView;
}
Если кнопка HorizontalNumberPicker
«s щелкнул -> счетчик меняется (цена в ArrayList
) - >tv_menu_price.setText(String.valueOf(price*count));
->EditText(tv_menu_price)
меняется (в адаптере).
Я не знаю, где я могу добавить или отредактировать этот код. Просто это не работает. Как я могу сделать?
Спасибо за ответ. Но как я могу попробовать? Я попробовал ArrayList- getData() {return list;} и notifyDatasetChanged. Но это не работает. Я могу узнать данные, измененные только в customAdapter.java, поэтому я не знаю, как может setData в Activity .... –
DaisyYoun
Вы можете делать такие вещи: ArrayList- data = adapter.getData(); Теперь измените «данные», поскольку данные будут указывать на adapter.getData(); поэтому любое изменение данных также изменит ваш список в адаптере. После этого вызовите adapter.notifyDataSetChanged(); –
Я попробовал listview.setAdapter (listAdapter); listAdapter.getData(); listAdapter.notifyDataSetChanged(); ... это правильно? – DaisyYoun