如何解决Android onClick切换RecyclerView项
按现在的方式运行此代码,我可以构建一个项目列表,在单击该项目时,背景将变为灰色,就像选中该项目一样。再次单击,背景恢复为白色。我遇到且无法弄清的问题是,如何像共享首选项一样将背景颜色永久保持灰色,所以当应用程序更改方向或退出时,所选项目保持选中状态,直到再次单击以取消选择?
public class CampingItemRecyclerViewAdapter extends RecyclerView.Adapter<CampingItemRecyclerViewAdapter.ViewHolder>{
int i;
public final List<CampingItem> campingItems;
ListListener listListener;
public CampingItemRecyclerViewAdapter(List<CampingItem> campingItems){
this.campingItems = campingItems;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_item,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
final CampingItem campingItem = campingItems.get(position);
if (campingItem != null){
holder.campingItem = campingItem;
holder.txtLine1.setText(campingItem.getItemName());
holder.txtLine2.setText(campingItem.getItemCost());
holder.txtLine3.setText(campingItem.getInStock());
holder.txtLine4.setText(campingItem.getLocation());
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (i == 0){
v.setBackgroundColor(Color.GRAY);
i++;
}
else if (i == 1) {
v.setBackgroundColor(Color.WHITE);
i = 0;
}
}
});
holder.root.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Bundle bundle = new Bundle();
bundle.putInt("campingItem_pk",campingItem.get_id());
CampingItemDetailsDialogFragment detailsFragment = new CampingItemDetailsDialogFragment();
detailsFragment.setArguments(bundle);
AppCompatActivity activity = (AppCompatActivity) v.getContext();
activity.getSupportFragmentManager().beginTransaction()
.add(android.R.id.content,detailsFragment)
.addToBackStack(null)
.commit();
return true;
}
});
}
}
@Override
public int getItemCount() {
return campingItems.size();
}
public void addItems(List<CampingItem> campingItems){
this.campingItems.clear();
this.campingItems.addAll(campingItems);
notifyDataSetChanged();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public View root;
public CampingItem campingItem;
public TextView txtLine1,txtLine2,txtLine3,txtLine4;
public ViewHolder(View itemView){
super (itemView);
root = itemView;
txtLine1 = (TextView)root.findViewById(R.id.txtLine1);
txtLine2 = (TextView)root.findViewById(R.id.txtLine2);
txtLine3 = (TextView)root.findViewById(R.id.txtLine3);
txtLine4 = (TextView)root.findViewById(R.id.txtLine4);
}
}
}
public class MainActivityFragment extends Fragment {
View root;
private RecyclerView recyclerView;
private CampingItemRecyclerViewAdapter campingItemRecyclerViewAdapter;
private int columnCount = 1;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
root = inflater.inflate(R.layout.fragment_main,container,false);
recyclerView = (RecyclerView)root.findViewById(R.id.recyclerView);
return root;
}
@Override
public void onResume() {
super.onResume();
Context context = getContext();
campingItemRecyclerViewAdapter = new CampingItemRecyclerViewAdapter(new ArrayList<CampingItem>());
if(columnCount <= 1){
recyclerView.setLayoutManager(new LinearLayoutManager(context));
}else{
recyclerView.setLayoutManager(new GridLayoutManager(context,columnCount));
}
recyclerView.setAdapter(campingItemRecyclerViewAdapter);
recyclerView.setHasFixedSize(false);
ViewModelProviders.of(this)
.get(AllCampingItemsViewModel.class)
.getCampingItemList(context)
.observe(this,new Observer<List<CampingItem>>() {
@Override
public void onChanged(List<CampingItem> campingItems) {
if (campingItems != null){
campingItemRecyclerViewAdapter.addItems(campingItems);
}
}
});
}
}
public class MainActivity extends AppCompatActivity {
FragmentManager fm;
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Camping List");
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fm = getSupportFragmentManager();
fm.beginTransaction()
.add(android.R.id.content,new NewCampingItemDialogFragment())
.addToBackStack(null)
.commit();
}
});
}
}
解决方法
您要寻找的功能是 recyclerview-selection 库的一部分。看一下this。不幸的是,它是针对kotlin的,但是您应该可以在Java中毫无问题地重写它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。