【已解决】 Recycleview每次更新数据item都会左移
通过一个加入按钮来给list添加item,但是每次添加后的item都会左移,应该怎么解决
item 的布局代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_height="wrap_content">
<androidx.cardview.widget.CardView
android:layout_width="1000dp"
app:cardBackgroundColor="@color/teal_200"
android:layout_height="1dp">
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_gravity="center"
android:gravity="center"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:textColor="@color/black"
android:textSize="20sp"
android:text="班级:"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/name_tv"
android:layout_width="match_parent"
android:layout_marginLeft="20dp"
android:text="xxx"
android:textStyle="bold"
android:textSize="20sp"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:textColor="@color/black"
android:textSize="20sp"
android:text="姓名:"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/class_tv"
android:layout_width="wrap_content"
android:layout_marginLeft="20dp"
android:text="高三八班"
android:textStyle="bold"
android:textSize="20sp"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:textColor="@color/black"
android:textSize="20sp"
android:text="学号:"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/number_tv"
android:layout_width="match_parent"
android:layout_marginLeft="20dp"
android:text="20211157"
android:textStyle="bold"
android:textSize="20sp"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:textColor="@color/black"
android:textSize="20sp"
android:text="分数:"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/score_tv"
android:layout_width="match_parent"
android:layout_marginLeft="20dp"
android:text="98分"
android:textStyle="bold"
android:textSize="20sp"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<androidx.cardview.widget.CardView
android:layout_width="1000dp"
app:cardBackgroundColor="@color/teal_200"
android:layout_height="1dp">
</androidx.cardview.widget.CardView>
</LinearLayout>
2.Recycleviewadapter代码
public class RecycleviewAdapter extends RecyclerView.Adapter<RecycleviewAdapter.InnerHolder> {
private List<DataBeans> mDataBeans;
private TextView mName;
private TextView mClass;
private TextView mNumber;
private TextView mScore;
private DataBeans mBeans =new DataBeans();
private Map<Integer,DataBeans> mBeansMap =new HashMap<>();
public RecycleviewAdapter(List<DataBeans> data){
Log.d("adapter---","data---"+data);
this.mDataBeans =data;
mBeansMap.put(data.size(),mBeans);
Log.d("adapter---","map---"+mBeansMap);
}
@NonNull
@Override
public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(), R.layout.item_msg, null);
return new InnerHolder(view);
}
@Override
public void onBindViewHolder(@NonNull InnerHolder holder, int position) {
holder.setData(mDataBeans.get(position));
}
@Override
public int getItemCount() {
if (mDataBeans!=null){
Log.d("adapter---","databenas---"+mDataBeans.size());
return mDataBeans.size();
}
return 0;
}
public class InnerHolder extends RecyclerView.ViewHolder {
public InnerHolder(@NonNull View itemView) {
super(itemView);
mName = itemView.findViewById(R.id.name_tv);
mClass = itemView.findViewById(R.id.class_tv);
mNumber = itemView.findViewById(R.id.number_tv);
mScore = itemView.findViewById(R.id.score_tv);
}
public void setData(DataBeans dataBeans) {
mName.setText(dataBeans.getName());
mClass.setText(dataBeans.getmClass());
mScore.setText(dataBeans.getScore());
mNumber.setText(dataBeans.getNumber());
}
}
}
3.Acvivity
public class EditMsgActivity extends AppCompatActivity {
private EditText mClass_ip;
private EditText mName_ip;
private EditText mNumber_ip;
private EditText mScore_ip;
private Button mAdd_btn;
private RecyclerView mRecyclerView;
private String MClass;
private String mName;
private String mScore;
private String mNumber;
private List<DataBeans> mData=new ArrayList<>();
private DataBeans mDataBeans;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_msgshow);
initview();
setOnClickListener();
}
private void setOnClickListener() {
mAdd_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mRecyclerView.setHasFixedSize(true);
getEtmsg();
setdata();
setListviewEvent();
mClass_ip.getText().clear();
mName_ip.getText().clear();
mScore_ip.getText().clear();
mNumber_ip.getText().clear();
}
});
}
private void setdata() {
int count=0;
if (mName!=null&&MClass!=null&&mNumber!=null&&mScore!=null){
mDataBeans=new DataBeans();
mDataBeans.setName(mName);
mDataBeans.setmClass(MClass);
mDataBeans.setNumber(mNumber);
mDataBeans.setScore(mScore);
Log.d("EditActivity----","databeans-------"+mDataBeans.toString());
if (mDataBeans!=null){
mData.add(mDataBeans);
Log.d("EditActivity----","data-------"+mData);
}
}
}
private void setListviewEvent() {
RecycleviewAdapter adapter = new RecycleviewAdapter(mData);
mRecyclerView.addItemDecoration(new SpaceItemDecoration(0,15));
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(adapter);
mRecyclerView.setHasFixedSize(true);
}
private void getEtmsg() {
MClass = mClass_ip.getText().toString();
Log.d("EditActivity----","class----"+MClass);
mName = mName_ip.getText().toString();
mScore = mScore_ip.getText().toString();
mNumber = mNumber_ip.getText().toString();
}
private void initview() {
mClass_ip = this.findViewById(R.id.class_input);
mName_ip = this.findViewById(R.id.name_input);
mNumber_ip = this.findViewById(R.id.number_input);
mScore_ip = this.findViewById(R.id.score_input);
mAdd_btn = this.findViewById(R.id.add_btn);
mRecyclerView = this.findViewById(R.id.list_view);
}
//设置边距
public static class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private final int normal;
private final int margin;
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.top = normal;
outRect.bottom = normal;
if (parent.getChildAdapterPosition(view) % 3 == 0) {
outRect.right = normal;
outRect.left = margin;
} else if (parent.getChildAdapterPosition(view) % 3 == 1) {
outRect.right = margin;
outRect.left = margin;
} else if (parent.getChildAdapterPosition(view) % 3 == 2) {
outRect.right = normal;
outRect.left = margin;
}
}
public SpaceItemDecoration(int normal, int margin) {
this.normal = normal;
this.margin = margin;
}
}
已经解决
可恶,已经解决,又痛失了捞赏金的机会