【发布时间】:2016-05-26 23:06:51
【问题描述】:
我有一个RecyclerView,它列出了一个文本和一个按钮。
如果我单击按钮,Toast 文本会显示位置,按钮颜色将更改为 #343434。
当我点击一个按钮时效果很好,但如果我循环我的RecyclerView 另一个按钮颜色改变但不点击,只有背景颜色改变。
如下图所示:
首先,我单击项目 1 并出现 Toast 文本,按钮背景更改。
然后我向下循环,第 15 项的按钮背景正在改变。
最后我向上滚动到第一个位置项目 1 的按钮颜色仍然是原始颜色,并且项目 4 的按钮背景颜色发生了变化。
这是我的代码块:
public class HandleTouchRecyclerViewActivity extends BaseActivity implements ObservableScrollViewCallbacks {
private static final String TAG = HandleTouchRecyclerViewActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handletouchrecyclerview);
ObservableRecyclerView recyclerView = (ObservableRecyclerView) findViewById(R.id.scroll);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
recyclerView.setScrollViewCallbacks(this);
recyclerView.setAdapter(new CustomAdapter(this, getDummyData()));
}
@Override
public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) {
Log.v(TAG, "onScrollChanged: scrollY: " + scrollY + " firstScroll: " + firstScroll + " dragging: " + dragging);
}
@Override
public void onDownMotionEvent() {
Log.v(TAG, "onDownMotionEvent");
}
@Override
public void onUpOrCancelMotionEvent(ScrollState scrollState) {
Log.v(TAG, "onUpOrCancelMotionEvent: scrollState: " + scrollState);
}
public static class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private Context mContext;
private LayoutInflater mInflater;
private ArrayList<String> mItems;
public CustomAdapter(Context context, ArrayList<String> items) {
mContext = context;
mInflater = LayoutInflater.from(context);
mItems = items;
}
@Override
public int getItemCount() {
return mItems.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(mContext, mInflater.inflate(R.layout.list_item_handletouch, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.textView.setText(mItems.get(position));
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
Context context;
public ViewHolder(Context context, View view) {
super(view);
this.context = context;
this.textView = (TextView) view.findViewById(android.R.id.text1);
view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
click(getLayoutPosition() + 1,v);
v.setBackgroundColor(Color.parseColor("#343434"))
}
});
}
private void click(int i,View view) {
String message = "Button " + i + " is clicked";
view.setBackgroundColor(Color.parseColor("#343434"));
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
Log.v(TAG, "click: " + message);
}
}
}
}
那么,我该如何避免呢? (Android中的截图和代码Android Observable-ScrollView)
【问题讨论】:
-
你能发布你的代码吗?
-
我没有代码。我编辑了 Android-Observable ScrollView 。您可以在顶部看到链接。我刚刚编辑了 HandleTouchRecyclerView 活动。你可以在 github 页面上看到这个。谢谢
-
对不起,没有代码我们如何跟踪错误?
-
我在上面编辑了代码。
标签: android android-recyclerview