1

Я пытаюсь сделать горизонтальный прокручиваемый просмотр изображений с помощью прослушивателя OnClick, прикрепленного к каждому, который отправляет пользователя на новую веб-страницу. Я сделал очень хорошо с вертикальным списком, но теперь хочу, чтобы он был горизонтальным. Как я могу это сделать. Я пробовал использовать recyclerView, как Android, но я не могу заставить его принять адаптер.использовать RecyclerView для создания горизонтального представления списка, основанного на адаптере списка абонентов Android

Это дает мне эту ошибку: вид переработчик не может быть применен к CustomeListAdpater, а также, когда я пытаюсь добавить OnClick он говорит, что не может решить метод setOnClickListern (анонимный android.widget.AdapterView.OnItemClickListener())

Итак, вот что я до сих пор;

Вот Линейный LayoutManager

LinearLayoutManager layoutManager= new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false); 
    recyclerView = (RecyclerView)findViewById(R.id.promotionHolder); 
    recyclerView.setLayoutManager(layoutManager); 

и вот где я назначу адаптер список клиентов с точки зрения рециркуляции

private void fillListView(ArrayList<ListItem> listData) 
{ 
    final ListView listView = (ListView) findViewById(R.id.custom_list); 
    listView.setAdapter(new CustomListAdapter(this, listData)); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     //here is a method to either send the user to the poduct page 
     //or to the main page in the app 
     //open a new activity and close this one down 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      ListItem promoData = (ListItem) listView.getItemAtPosition(position); 
      //lest open up the corrisponding webpage 
      Intent reDirect = new Intent(); 
      reDirect.setAction(Intent.ACTION_VIEW); 
      reDirect.addCategory(Intent.CATEGORY_BROWSABLE); 
      reDirect.setData(Uri.parse(promoData.getPathUrl())); 
      String newUrl = Uri.parse(promoData.getPathUrl()).toString(); 
      if (newUrl.contains("http")) { 
       startActivity(reDirect); 
      } else { 
       //if not do nothing 
       Log.d("Path URL: ", " is null"); 
      } 

     } 
    }); 

    recyclerView.setAdapter(new CustomListAdapter(this, listData)); 
    recyclerView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     //here is a method to either send the user to the poduct page 
     //or to the main page in the app 
     //open a new activity and close this one down 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      ListItem promoData = (ListItem) listView.getItemAtPosition(position); 
      //lest open up the corrisponding webpage 
      Intent reDirect = new Intent(); 
      reDirect.setAction(Intent.ACTION_VIEW); 
      reDirect.addCategory(Intent.CATEGORY_BROWSABLE); 
      reDirect.setData(Uri.parse(promoData.getPathUrl())); 
      String newUrl = Uri.parse(promoData.getPathUrl()).toString(); 
      if (newUrl.contains("http")) { 
       startActivity(reDirect); 
      } else { 
       //if not do nothing 
       Log.d("Path URL: ", " is null"); 
      } 

     } 
    }); 
} 

я сохранил оригинальную Listview в там, потому что он прекрасно работает как пример того, что я делал с этим.

Это мой XML-файл

<android.support.v7.widget.RecyclerView 
    android:id="@+id/promotionHolder" 
    android:layout_below="@+id/logout" 
    android:layout_width="match_parent" 
    android:layout_height="240dp" 
    android:orientation="horizontal" 
    android:layoutManager = "android.support.v7.widget.LinearLayoutManager" 
    > 


</android.support.v7.widget.RecyclerView> 

Это мой пользовательский список адаптер

public class CustomListAdapter extends BaseAdapter{ 
private ArrayList<ListItem> listData; 
private LayoutInflater layoutInflater; 

public CustomListAdapter(Context context, ArrayList<ListItem> listData) { 
    this.listData = listData; 
    layoutInflater = LayoutInflater.from(context); 
} 

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

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

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

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = layoutInflater.inflate(R.layout.list_row_layout, null); 
     holder = new ViewHolder(); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.thumbImage); 
     holder.labelView = (TextView)convertView.findViewById(R.id.label); 
     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    ListItem newsItem = listData.get(position); 
    //Check to see if there is a lable attached to the image 
    if(newsItem.getLableTitle().equals("null")) 
    { 
     holder.labelView.setText(""); 

    }else 
    { 
     holder.labelView.setText(newsItem.getLableTitle()); 
    } 

    if (holder.imageView != null) { 
     new ImageDownloaderTask(holder.imageView).execute(newsItem.getUrl()); 
    } 

    return convertView; 
} 

static class ViewHolder { 
    ImageView imageView; 
    TextView labelView; 
} 
} 

И это list_row_layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:minHeight="8dp" 
android:padding="1dp" 
android:background="#000000" 
> 


<ImageView 
    android:id="@+id/thumbImage" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:background="#000000" 

    /> 
<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/label" 
    android:layout_below="@id/thumbImage" 
    android:layout_marginTop="1dp" 
    android:layout_centerHorizontal="true" 
    android:textColor="#ffffff" 
    android:textSize="8pt" 
    /> 

ответ

1

RecyclerView не обеспечивает #setOnItemClickListener, ни RecyclerView.Adapter.

Вы должны установить прослушиватель кликов в Adapters onBindViewHolder. Поскольку я не вижу ссылки на этот метод выше, я думаю, что ваш адаптер еще не перенесен в новый метод RecyclerView.

Вы можете сослаться на ссылки в Интернете, например https://www.binpress.com/tutorial/android-l-recyclerview-and-cardview-tutorial/156, чтобы узнать, как это сделать.

+0

Я собираюсь сказать ваше право и что мне придется все переделать с нуля. Я не думаю, что могу перепрофилировать проект, который использовал. Большое спасибо – MNM

+0

Переключение на ** много ** классов RecyclerView ('Adapter',' ViewHolder' и т. Д.) Сначала кажется странным/сложным, но позже делает вещи более гладкими. Вы не хотите возвращаться. :-) –