【发布时间】:2019-07-27 15:04:22
【问题描述】:
我是 Android 新手,我有一个问题。 我有一个可以点击的 recyclerview 并会发送一个查询。点击时,会得到每个被点击位置的编号/ID,
像这样:
fno = arrivals.get(position).flightno;
codeCity = arrivals.get(position).arr;
第一次点击成功,第二次或第三次点击就报错。我认为这是因为变量 fno 和 codeCity 已被填充。那么如何删除变量上的值呢?
这是我点击 recyclerview 时的代码:
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
GestureDetector gestureDetector = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener() {
public boolean onSingleTapUp(MotionEvent e){
return true;
}
});
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && gestureDetector.onTouchEvent(e)){
int position = rv.getChildAdapterPosition(child);
fno = arrivals.get(position).flightno;
codeCity = arrivals.get(position).arr;
final Bundle i = new Bundle();
i.putString("city", codeCity.toString()); // Key1
i.putString("flightno", fno.toString()); // Key1
open2(i);
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
这是查询
public void open2(Bundle args) {
codeIata = args.getString("city");
String flightdate = args.getString("flightdate");
fno = args.getString("flightno");
ArrivalActivity.detail(codeIata, flightdate, fno);
}
public static void detail(String s, String date, String fno) {
DateFormat df = new SimpleDateFormat("yyyy-MM-d");
date = df.format(Calendar.getInstance().getTime());
Call<GetArrivals> arrCall = mApiInterface.getArr(s, "2019-03-04", "", fno);
arrCall.enqueue(new Callback<GetArrivals>() {
@Override
public void onResponse(Call<GetArrivals> call, Response<GetArrivals>
response) {
System.out.println("status code "+response.code());
arrivals = response.body().getResult();
mAdapter = new ArrivalAdapter(mContext, arrivals);
//mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onFailure(Call<GetArrivals> call, Throwable t) {
Log.e("Retrofit Get", t.toString());
}
});
}
谢谢!
【问题讨论】:
-
你遇到了什么错误?
-
您需要 onClick 而不是 onTouch,这样您就可以获得点击的元素的正确位置,请参考我的回答 stackoverflow.com/a/44963520/1506395
-
@BachVu 指向线 fno = Arrivals.get(position).flightno;
-
@Rajesh 但如果我将 onClick 放入适配器中,我将无法发送查询
-
我看不到任何查询,您是在谈论捆绑值吗?
标签: android android-recyclerview recyclerview-layout onitemclick