Я использую RecyclerView и Adapter, я использую setClickListener(), чтобы щелкнуть элемент в представлении и перейдет к другому действию. но Im сталкивается с проблемой класса интерфейса ItemClickListener. КлассНевозможно реализовать метод setClickListener() в RecyclerView
Мой Интерфейс:
public interface ItemClickListener {
void onClick(View view, int position);
}
Мой адаптер:
public class RecyclerViewCategoryAdapter extends RecyclerView.Adapter<RecyclerViewCategoryAdapter.ViewHolder> {
Context context;
ImageLoader imageThumbLoader;
private ItemClickListener clickListener;
public RecyclerViewCategoryAdapter(ArrayList<HashMap<String, String>> getCarData, Context context){
super();
this.getCarData = getCarData;
this.context = context;
}
@Override
public RecyclerViewCategoryAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_car_info, parent, false);
RecyclerViewCategoryAdapter.ViewHolder viewHolder = new RecyclerViewCategoryAdapter.ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerViewCategoryAdapter.ViewHolder viewholder, int position) {
...
}
public int getDataAdapter() {
return getCarData == null ? 0 : getCarData.size();
}
@Override
public int getItemCount() {
return getDataAdapter(); // + 1;
}
public void setClickListener(ItemClickListener itemClickListener) {
this.clickListener = itemClickListener;
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView titleName;
public NetworkImageView imageThumb;
public ViewHolder(View itemView) {
super(itemView);
titleName = (TextView) itemView.findViewById(R.id.titleName);
imageThumb = (NetworkImageView) itemView.findViewById(R.id.imageThumb);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (clickListener != null) clickListener.onClick(view, getAdapterPosition());
}
}
}
Мой RecyclerView класс (CategoryCarActivity) ОБНОВЛЕНО:
public class CategoryCarActivity extends AppCompatActivity implements AbsListView.OnScrollListener, AbsListView.OnItemClickListener, ItemClickListener {
RecyclerViewCategoryAdapter recyclerViewAdapter;
RecyclerView recyclerView;
RecyclerView.LayoutManager recyclerViewLayoutManager;
private LinearLayout linearLayoutScroll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycler_category_adapter);
...
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerViewLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(recyclerViewLayoutManager);
new LoadCategoryCars().execute();
recyclerViewAdapter.setClickListener(this);
}
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(), DetailListCarActivityDemo1.class);
String car_id = ((TextView) view.findViewById(R.id.manufacturer_id)).getText().toString();
String price = ((TextView) view.findViewById(R.id.price)).getText().toString();
Toast.makeText(getApplicationContext(), "Car Id: " + car_id + ", Price: " + price, Toast.LENGTH_SHORT).show();
i.putExtra("car_id", car_id);
i.putExtra("price", price);
Log.i("Car ID: ", car_id);
Log.i("Price: ", price);
startActivity(i);
}
// Initialize Toolbar the first time
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.map_icon_toolbar, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Toast.makeText(this, "Item Clicked: " + position, Toast.LENGTH_SHORT).show();
}
/**
* Background Async Task to Load all tracks under one album
* */
class LoadCategoryCars extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(CategoryCarActivity.this);
pDialog.setMessage("Loading cars ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting tracks json and parsing
* */
protected String doInBackground(String... args) {
...
} catch (JSONException e) {
e.printStackTrace();
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String result) {
super.onPostExecute(result);
recyclerViewAdapter = new RecyclerViewCategoryAdapter(carsList, CategoryCarActivity.this);
recyclerViewAdapter.notifyDataSetChanged();
recyclerView.setAdapter(recyclerViewAdapter);
// dismiss the dialog after getting all manufacturers
if (pDialog.isShowing())
pDialog.dismiss();
}
}
}
В строке (ОБНОВЛЕНО):
public class CategoryCarActivity extends AppCompatActivity implements AbsListView.OnScrollListener, AbsListView.OnItemClickListener, ItemClickListener {
компилятор произойдет ошибка с сообщением (ОБНОВЛЕНО):
Class 'CategoryCarActivity' must either be declared abstract or implement abstract method 'onClick(View, int)' in 'ItemClickListener'
Как исправить эту проблему? Большое спасибо !
Спасибо @Charlie: Я обновил как ваши рекомендовать, но apprear новой ошибку –
К сожалению, я добавил еще параметр: 'INT' в положении onClick, и это сработало! Большое спасибо ! –
Brilliant :) Я тоже редактировал свой ответ, чтобы включить это. – Charlie