gpt4 book ai didi

android - 我正在使用回收器 View 开发一个简单的电影列表应用程序

转载 作者:行者123 更新时间:2023-11-29 01:08:40 26 4
gpt4 key购买 nike

到目前为止,我是 android 的新手,我已经创建了带装饰的回收器 View ,但现在我无法在回收器 View 中设置 onClick 监听器,请帮助...第一个错误是 clicklistener 界面说

clicklistener already defined in compilation unit

因此 onclick 和 onlongclick 方法也会出错....在主要 Activity 中我在覆盖时遇到错误说

method does not override from its superclass

回收站触摸监听器代码:

public interface ClickListener {
void onClick(View view, int position);

void onLongClick(View view, int position);
}

public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

private GestureDetector gestureDetector;
private MainActivity.ClickListener clickListener;

public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final MainActivity.ClickListener clickListener) {
this.clickListener = clickListener;
gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}

@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null) {
clickListener.onLongClick(child, recyclerView.getChildLayoutPosition(child));
}
}
});

}

@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
clickListener.onClick(child, rv.getChildLayoutPosition(child));
}
return false;
}

@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}



}
main_activty:

public class MainActivity extends AppCompatActivity {

private List<Movie> movieList=new ArrayList<>();
private RecyclerView recyclerView;
private MoviesAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
recyclerView=(RecyclerView)findViewById(R.id.recycler_view);
mAdapter=new MoviesAdapter(movieList);
RecyclerView.LayoutManager mLayoutManager=new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
prepareMovieData();
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
recyclerView.setAdapter(mAdapter);
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, int position) {
Movie movie = movieList.get(position);
Toast.makeText(getApplicationContext(), movie.getTitle() + " is selected!", Toast.LENGTH_SHORT).show();
}

@Override
public void onLongClick(View view, int position) {

}
}));


}
private void prepareMovieData(){

Movie movie = new Movie("Mad Max: Fury Road", "Action & Adventure", "2015");
movieList.add(movie);

movie = new Movie("Inside Out", "Animation, Kids & Family", "2015");
movieList.add(movie);

movie = new Movie("Star Wars: Episode VII - The Force Awakens", "Action", "2015");
movieList.add(movie);

movie = new Movie("Shaun the Sheep", "Animation", "2015");
movieList.add(movie);

movie = new Movie("The Martian", "Science Fiction & Fantasy", "2015");
movieList.add(movie);

movie = new Movie("Mission: Impossible Rogue Nation", "Action", "2015");
movieList.add(movie);

movie = new Movie("Up", "Animation", "2009");
movieList.add(movie);

movie = new Movie("Star Trek", "Science Fiction", "2009");
movieList.add(movie);

movie = new Movie("The LEGO Movie", "Animation", "2014");
movieList.add(movie);

movie = new Movie("Iron Man", "Action & Adventure", "2008");
movieList.add(movie);

movie = new Movie("Aliens", "Science Fiction", "1986");
movieList.add(movie);

movie = new Movie("Chicken Run", "Animation", "2000");
movieList.add(movie);

movie = new Movie("Back to the Future", "Science Fiction", "1985");
movieList.add(movie);

movie = new Movie("Raiders of the Lost Ark", "Action & Adventure", "1981");
movieList.add(movie);

movie = new Movie("Goldfinger", "Action & Adventure", "1965");
movieList.add(movie);

movie = new Movie("Guardians of the Galaxy", "Science Fiction & Fantasy", "2014");
movieList.add(movie);

mAdapter.notifyDataSetChanged();
}

public interface ClickListener {
}
}

最佳答案

我正在使用 RecyclerView.OnItemTouchListener 的自定义实现这是它的代码 -

public class RecycleItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;

public interface OnItemClickListener {
public void onItemClick(View view, int position);
}

GestureDetector mGestureDetector;

public RecycleItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}

@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
}
return false;
}

@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}
}

然后像这样使用这个自定义的RecycleItemClickListener -

recyclerView.addOnItemTouchListener(
new RecycleItemClickListener(context, new RecycleItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {
// TODO Handle item click

}
})
);

这总是有效的:)

关于android - 我正在使用回收器 View 开发一个简单的电影列表应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45102528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com