0

Я пытаюсь поместить кнопку в каждый элемент списка. Это идея:setOnItemClickListener не работает для кнопки в ListView

Текст1 ____________ [BTN]

Text2 ____________ [BTN]

и т.д ...

XML, для элементов является:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:descendantFocusability="blocksDescendants"> 

    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="?android:attr/listPreferredItemHeight" 
     android:gravity="center_vertical" 
     android:id="@+id/list_item_textview"/> 

    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/deleteButton" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:background="@null" 
     android:clickable="true" 
     android:focusable="false" 
     android:src="@drawable/ic_delete_black_24dp"/> 
</RelativeLayout> 

Есть два действия, разделяющие один и тот же фрагмент. Этот фрагмент использует SimpleCursorAdapter для извлечения данных из базы данных. Это работает отлично.

После создания и установки адаптера я пытаюсь найти кнопку и сделать setOnClickListener. Это не работает.

Вот код для метода onCreateView во фрагменте:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_item_scroll, container, false); 

    ListView listView = (ListView) rootView.findViewById(R.id.listview_item); 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(
      getActivity(), 
      R.layout.list_item, 
      ((ListItems)getActivity()).getCursor(1,1), 
      new String[] {((ListItems) getActivity()).getColumnName()}, 
      new int[] {R.id.list_item_textview}, 0); 

    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent intent = new Intent(getActivity(), ((ListItems) getActivity()).getGoToClass()); 
      intent.putExtra("apiary_id",(int) id); 
      intent.putExtra("hive_id", -1); 
      startActivity(intent); 

     } 
    }); 


/* SOMEWHERE BELOW IS THE PROBLEM */ 

    View list_item_view = inflater.inflate(R.layout.list_item, container, false); 

    ImageButton deleteButton = (ImageButton) list_item_view.findViewById(R.id.deleteButton); 
    System.out.println("====================>" + deleteButton.toString()); //This prints something which includes the id of the button, so it is finding it. 
    deleteButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      System.out.println("THIS IS NOT WORKING!!!!"); 
     } 
    }); 

    return rootView; 
} 

Это мой первый андроид приложение, и я с этой проблемой в течение нескольких дней теперь без какого-либо прогресса. Любые намеки приветствуются!

спасибо!

+0

Попробуйте? http://stackoverflow.com/questions/11428303/android-cant-click-on-listview-row-with-imagebutton – Andro

+0

Спасибо за ваш комментарий. Однако это не моя проблема. Я могу нажать кнопку, а также элементы списка. Проблема в том, что, хотя я могу нажать кнопку, кнопка не будет запускать SetOnClickListener. –

+0

попробуйте сначала зарегистрировать log.e («сообщение», «ваше сообщение»); 'вместо s.o.p, а затем проверить, отображается ли там сообщение –

ответ

0

Сделать заказ список адаптер как этот

public class CustomListAdapter extends BaseAdapter { 
private String[] items; 
private LayoutInflater inflater; 
Context context; 
public CustomListAdapter(Context c, String[] items) { 
    this.items = items; 
    inflater =LayoutInflater.from(c); 
    context = c; 
} 

@Override 
public int getCount() { 
    return items.length; 
} 

@Override 
public Object getItem(int location) { 
    return items[location]; 
} 

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

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.list_item, null); 
    TextView txt = (TextView) convertView.findViewById(R.id.list_item_textview); 
    ImageButton button = (ImageButton) convertView.findViewById(R.id.deleteButton); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "clicked ", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    txt.setText(""+items[position]); 

    return convertView; 
} 

}

и в вашем фрагменте

CustomListAdapter customListAdapter; 
customListAdapter = new CustomListAdapter(getActivity(),str); 
     list.setAdapter(customListAdapter); 

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

+0

Спасибо за ваш ответ, но я попробовал, и это кажется невозможным. setonItemClickListener ожидает OnItemClickListener, а не активность. –

+0

Что вы пробовали – MaxExplode

+0

Эта строка: listView.setOnItemClickListener (getActivity()) Он выдает ошибку –