0

Попытка реализовать функцию onlick для списка android listview, но что-то кажется неработоспособным. Я попытался найти некоторые решения через Интернет, и я обнаружил, что есть рекомендации по изменению фокусируемого свойства элементов изображения и текста. Пробовал это, и это не сработало. Цените, если вы, ребята, можете порекомендовать любые другие альтернативы.Почему ListView onClick не работает?

Layout item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center" 
       android:id="@+id/rootItemId" 
       android:clickable="true" 
       android:gravity="center_vertical"> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:focusable='false' 
     android:background="@drawable/frame"> 

     <ImageView 
      android:id="@+id/ivIcon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:contentDescription="@string/hello_world" 
      android:padding="5dp" 
      android:focusable='false' 
      android:src="@drawable/ic_launcher" 
      android:scaleType="fitXY"/> 

     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:focusable='false' 
      android:layout_toRightOf="@id/ivIcon"> 

      <TextView 
       android:id="@+id/tvTitle" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:focusable='false' 
       android:textAppearance="@android:style/TextAppearance.Medium"/> 

     </RelativeLayout> 

    </RelativeLayout> 

</RelativeLayout> 

фрагмент списка

public class EventsListFragment extends ListFragment{ 

    ArrayList<Event> eventsChildren; 
    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     Log.e("RedditListingsClick",position + " " + id); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     eventsChildren = new ArrayList<Event>(); 
     EventsChildAdapter adapter = new EventsChildAdapter(inflater.getContext(), eventsChildren); 
     setListAdapter(adapter); 
     return super.onCreateView(inflater, container, savedInstanceState); 
    } 
} 

список адаптер

public class EventsChildAdapter extends ArrayAdapter<Event> { 

    Context context; 
    RelativeLayout root; 
    private static class ViewHolder { 
     TextView title; 
     ImageView thumbnail; 
    } 

    public EventsChildAdapter(Context context, ArrayList<Event> eventsChildren) { 
     super(context, R.layout.item_listing, eventsChildren); 
     this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Get the data item for this position 
     Event child = getItem(position); 

     // Check if an existing view is being reused, otherwise inflate the view 
      ViewHolder viewHolder; // view lookup cache stored in tag 
      if (convertView == null) { 
       viewHolder = new ViewHolder(); 
       LayoutInflater inflater = LayoutInflater.from(getContext()); 
       convertView = inflater.inflate(R.layout.item_listing, null); 
       //root=(RelativeLayout)convertView.findViewById(R.id.rootItemId); 

       viewHolder.title = (TextView) convertView.findViewById(R.id.tvTitle); 
       //viewHolder.thumbnail = (ImageView) convertView.findViewById(R.id.ivIcon); 

       convertView.setTag(viewHolder); 
      } else { 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 
      // Populate the data into the template view using the data object 
      System.out.println(child.getTitle()); 
      viewHolder.title.setText(child.getTitle()); 

      Picasso.with(this.context).load(child.getThumbnailImageURL()).resize(200, 100).into(viewHolder.thumbnail); 

     // Return the completed view to render on screen 
      return convertView; 
    } 
} 

В дополнение к вышесказанному, я уже пытался добавить андроид: descendantFocusability = "blocksDescendants «для relativelayout, но все еще не работает. Наконец, я попытался сделать корень relativelayout clickable и удалить фокус с других элементов, и это тоже не сработало.

+0

вы получаете изображение в виде списка ?? –

+0

проверить эту ссылку http://stackoverflow.com/questions/21295328/android-listview-with-onclick-items –

+0

@DemoMail Да, я получаю изображение в списке. – user3200361

ответ

1

Вы можете попробовать это:

public class EventsListFragment extends ListFragment implement OnItemClickListener { 
... 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
    // the child callback here. 
} 
} 

и это в onActivityCreated

setListAdapter(Your adapter); 
getListView().setOnItemClickListener(this); 
+0

Где вы хотите, чтобы я создал onActivityCreated? getListView(). SetOnItemClickListener (this); даст ошибку? :) – user3200361

+0

если вы используете onCreateView, просто сделайте это в onCreateView() –

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