2015-08-17 10 views
-3

Я пытаюсь получить событие OnClick для кнопки внутри ListView, но это не работаетКнопка setOnClickListener в ListView

fragment_contact.xml

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="404dp" 
    android:layout_weight="0.64" 
    android:orientation="horizontal" 
    android:paddingBottom="40dip" > 

    <ListView 
     android:id="@+id/contactlistview" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="fill" 
     android:layout_weight="10" 
     android:textSize="5pt" 
     android:visibility="visible" /> 

</LinearLayout> 

fragment_contact_content.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:weightSum="1"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/btn_edit_contact" 
     android:layout_gravity="right" /> 

</LinearLayout> 

FragmentContact.java

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_contact, container, false); 

    ListAdapter adapter_contact = new SimpleAdapter(
        getActivity(), allcontact, 
        R.layout.fragment_contact_content, new String[]{"name", "level", "function", "phone", "email"}, 
        new int[]{R.id.contact, R.id.level, R.id.function, R.id.phone, R.id.email}); 

    listview_contact = (ListView) view.findViewById(R.id.contactlistview); 
    listview_contact.setItemsCanFocus(true); 
    listview_contact.setAdapter(adapter_contact); 

    Button btn_edit_contact = (Button) view.findViewById(R.id.btn_edit_contact); 
    btn_edit_contact.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      System.out.println("Do something"); 
     } 
    }); 

    return view; 
} 

Я также попытался накачивания fragment_contact_content.xml но кнопка все еще ничего не делает.

+0

Вы должны сделать это в GetView() из списка адаптер класса – Prasad

+0

список настроек с адаптером, а затем установить кнопку мыши в адаптере –

+0

я уже сделал установку на список с адаптером. Я просто не включил его в приведенный выше код, потому что я думал, что это уже очевидно. Во всяком случае, попробуем getView(). Я просто не понимаю нисходящего, когда я просто пытался усердно учиться здесь. – user3360031

ответ

1

Использование пользовательских адаптер и в GetView Написать свой код

public class MealAdapter extends BaseAdapter{ 
    private int mHour, mMinute; 
    int minutes,hour; 
     String strtime; 
    customButtonListener customListner; 
    private Context context; 
    private List<Meal> rowItems; 

    public MealAdapter(Context context, List<Meal> rowItems) { 

     this.context = context; 
     this.rowItems = rowItems; 
    } 

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

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

    @Override 
    public long getItemId(int position) { 
     return rowItems.indexOf(getItem(position)); 
    } 
    private class OptionHolder 
    { 

     ImageButton btn_time; 
     ImageButton btn_delete; 
    } 


    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 
     // TODO Auto-generated method stub 
     final OptionHolder holder; 


     if (convertView == null) 
      { 
      LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

      convertView = mInflater.inflate(R.layout.meal_list_item, null); 
      holder = new OptionHolder(); 

      holder.btn_time= (ImageButton) convertView.findViewById(R.id.btn_time); 
      holder.btn_delete =(ImageButton) convertView.findViewById(R.id.btn_delete_meal); 

      convertView.setTag(holder); 


      } 
      else 
      { 
       holder = (OptionHolder) convertView.getTag(); 
      } 
     final Meal row_pos=rowItems.get(position); 
      row_pos.setMeal(""); 
      row_pos.setDetail(""); 
      holder.ed_meal.setText(row_pos.getMeal()); 
      holder.ed_detail.setText(row_pos.getDetail()); 
      holder.ed_time.setText(row_pos.getTime()); 

     holder.btn_time.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      final Calendar c = Calendar.getInstance(); 
      mHour = c.get(Calendar.HOUR_OF_DAY); 
      mMinute = c.get(Calendar.MINUTE); 

      // Launch Time Picker Dialog 
      TimePickerDialog tpd = new TimePickerDialog(MealPlannerFragment.con, 
        new TimePickerDialog.OnTimeSetListener() { 

       @Override 
       public void onTimeSet(TimePicker view, int hourOfDay, 
         int minute) { 
        // Display Selected time in textbox 
        strtime=(hourOfDay + ":" + minute); 

        row_pos.setTime(strtime); 

        row_pos.setMunite(minute); 
        row_pos.setHour(hourOfDay); 
        holder.ed_time.setText(row_pos.getTime()); 
        } 
      }, mHour, mMinute, false); 
    tpd.show(); 

    } 
    }); 
     holder.btn_delete.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      if (customListner != null) { 
       customListner.onButtonClickListner(position,row_pos); 
      } 
     } 
    }); 

      return convertView; 
} 
    public interface customButtonListener { 
      public void onButtonClickListner(int position,Meal row_pos); 
     } 
    public void setCustomButtonListner(customButtonListener listener) { 
      this.customListner = listener; 
     } 

} 
` 
0

Вы не можете получить событие Button ячейки Listview непосредственно в onCreateView. для этого вам нужно сделать класс CustomAdapter.

вам необходимо создать пользовательский класс ArrayAdapter, который вы будете использовать для раздувания вашего xml-макета, а также для управления вашими кнопками и событиями кликов.

public class MyCustomAdapter extends BaseAdapter implements ListAdapter { 
private ArrayList<String> list = new ArrayList<String>(); 
private Context context; 

public MyCustomAdapter(ArrayList<String> list, Context context) { 
    this.list = list; 
    this.context = context; 
} 

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

@Override 
public Object getItem(int pos) { 
    return list.get(pos); 
} 

@Override 
public long getItemId(int pos) { 
    return list.get(pos).getId(); 
    //just return 0 if your list items do not have an Id variable. 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.fragment_contact_content, null); 
    } 

    //Handle button and add onClickListener 
    Button editBtn = (Button)view.findViewById(R.id.btn_edit_contact); 

    editBtn.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      //do something 
      //some other task 
      notifyDataSetChanged(); 
     } 
    }); 

    return view; 
} 
} 

Наконец, в вашей деятельности вы можете создать экземпляр пользовательского класса ArrayAdapter и установить его в ListView

public class MyActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my_activity); 

    //generate list 
    ArrayList<String> list = new ArrayList<String>(); 
    list.add("item1"); 
    list.add("item2"); 

    //instantiate custom adapter 
    MyCustomAdapter adapter = new MyCustomAdapter(list, this); 

    //handle listview and assign adapter 
    ListView lView = (ListView)findViewById(R.id.my_listview); 
    lView.setAdapter(adapter); 
} 

Вы можете обратиться по этой ссылке: http://www.c-sharpcorner.com/UploadFile/9e8439/create-custom-listener-on-button-in-listitem-listview-in-a/

просто обрабатывать на клик слушателя внутри GetView где вы найдете кнопку, используя findviewbyid

Надеюсь, это поможет!

+0

Спасибо за это. Вернусь к вам, если мне удастся заставить ее работать :) – user3360031

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