2015-09-14 2 views
1

Я хочу использовать горизонтальный набор номера, поэтому я сделал его пользовательским виджетами. В адаптере, когда я нажимаю кнопку пользовательского виджета и устанавливаю счет, я хочу изменить текст в адаптере 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) меняется (в адаптере).

Я не знаю, где я могу добавить или отредактировать этот код. Просто это не работает. Как я могу сделать?

ответ

0

Это не работает, потому что вы должны установить все данные, которые собираетесь изменить в наборе данных, и установить данные в тексты, такие как text.setText (dataSet.get (i) blabla). Итак, в вашей основной деятельности вы делаете так: adapter.getData(). Установите (i) .blabla, а затем вызовите mAdapter.notifyDataSetChanged() после внесения изменений в dataSet.

+0

Спасибо за ответ. Но как я могу попробовать? Я попробовал ArrayList getData() {return list;} и ​​notifyDatasetChanged. Но это не работает. Я могу узнать данные, измененные только в customAdapter.java, поэтому я не знаю, как может setData в Activity .... – DaisyYoun

+0

Вы можете делать такие вещи: ArrayList data = adapter.getData(); Теперь измените «данные», поскольку данные будут указывать на adapter.getData(); поэтому любое изменение данных также изменит ваш список в адаптере. После этого вызовите adapter.notifyDataSetChanged(); –

+0

Я попробовал listview.setAdapter (listAdapter); listAdapter.getData(); listAdapter.notifyDataSetChanged(); ... это правильно? – DaisyYoun

Смежные вопросы