Tim*_*j93 12 android android-recyclerview
我有RecyclerView一些view's/card(我现在称它为视图),它们都包含相同的东西,包括View我用作分隔条的东西.
我希望能够view在当前的上面更改此分隔栏的属性.所以说我点击说明的卡片test3,我希望能够设置分隔栏的属性test2 view.
我只需要参考上面ViewHolder的视图(或任何其他的)我点击的那个,就是全部.我该怎么做?
public class StuffManagerAdapter extends RecyclerView.Adapter<StuffManagerAdapter.MyViewHolder> {
private List<StuffManagerClass> stuffList;
private Context context;
private String TAG = "CStA";
DBHandler dbHandler;
ArrayList<String> tagArray = new ArrayList<>();
RecyclerView mRecyclerView;
public StuffManagerAdapter(List<StuffManagerClass> stuffList, Context context) {
this.stuffList = stuffList;
this.context = context;
dbHandler = DBHandler.getInstance(context);
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView DeviceTV, NameTV, TagTV;
private ImageButton editButton, deleteButton;
public ImageView tagWarningImage;
View view, bottomBar ,cover;
public MyViewHolder(final View view) {
super(view);
this.view = view;
DeviceTV = (TextView) view.findViewById(R.id.SMVFDeviceTextView);
// etc., etc.
editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do stuff
}
});
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do stuff
}
});
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_stuffmanagervariablefragment, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final StuffManagerClass sc = stuffList.get(position);
// Initialize card, set all textviews
holder.DeviceTV.setText(sc.getDevice());
holder.NameTV.setText(sc.getName());
holder.TagTV.setText(sc.getTag());
sc.setPosition(position);
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// This is where I would like to get a reference to the divider bar on the other view/card
}
});
}
@Override
public int getItemCount() {
return stuffList.size();
}
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- TextViews and stuff -->
<View
android:id="@+id/SMVFDividerBar"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_below="@+id/LL2"
android:layout_centerHorizontal="true"
android:layout_marginLeft="7dp"
android:layout_marginRight="7dp"
android:background="@color/colorPrimaryDark">
</RelativeLayout>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
不知道为什么我没有早点意识到这一点,但它确实有效.
首先,创建一个实例变量(如果这不是实例变量,请纠正我).
public class StuffManagerAdapter extends
RecyclerView.Adapter<StuffManagerAdapter.MyViewHolder> {
RecyclerView mRecyclerView;
Run Code Online (Sandbox Code Playgroud)
然后,在onCreateViewHolder()方法中分配此变量,如下所示:
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.thingy, parent, false);
mRecyclerView = (RecyclerView) parent;
return new MyViewHolder(itemView);
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的onBindViewHolder()方法中,您可以ViewHolder像这样访问其他人:
mRecyclerView.getChildAt(holder.getAdapterPosition-1);
Run Code Online (Sandbox Code Playgroud)
您可以将其设置为变量,或findViewById()直接调用其上的内容.
显然,您可以在getChildAt()语句中手动输入所需的任何位置,并且可以使用查找视图中的任何对象findViewById().
| 归档时间: |
|
| 查看次数: |
12771 次 |
| 最近记录: |