notifyDataSetChanged之后,Listitem的自定义布局未更新

时间:2019-03-09 08:46:38

标签: android android-recyclerview recycler-adapter

在我的应用程序中,我有两个活动,一个包含Recycleview,另一个活动负责更新数据库值,在adpater的OnBind方法中,我正在更新这些值(字体大小和颜色)。字体大小和颜色根据更新而定,但是包含这些项目的Layout并没有改变。

我按顺序发布输出信息的链接,第一个是不带edit(https://ibb.co/931P0Q4),第二个是带edit(https://ibb.co/KzY7VCL),他们是在重启应用程序后{https://ibb.co/C7cqf7Z

我的自定义商品的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:id="@+id/mainLainerHOlder"
    android:layout_height="wrap_content"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <com.chauthai.swipereveallayout.SwipeRevealLayout
        android:id="@+id/swipe_layout_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        app:mode="normal"
        app:dragEdge="right">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <TextView
                android:layout_width="90dp"
                android:layout_height="match_parent"
                android:gravity="center"
                android:id="@+id/cEditText"
                android:background="@color/initColor"
                android:textColor="@android:color/white"
                android:text="Edit"
                />

            <TextView
                android:layout_width="90dp"
                android:layout_height="match_parent"
                android:gravity="center"
                android:id="@+id/cDeleteText"
                android:background="@android:color/holo_red_dark"
                android:textColor="@android:color/white"
                android:text="Delete"
                />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/MianLinearLayoutContainer"
            android:background="@drawable/border_solid_white">

            <LinearLayout
                android:layout_width="match_parent"
                android:orientation="vertical"
                android:layout_height="wrap_content">

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="5dp">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Name will here"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:id="@+id/nametxtl"
                        android:textSize="20dp"/>

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Number here"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:id="@+id/nutxtl"
                        android:textSize="20dp"/>


                </LinearLayout>

            </LinearLayout>
        </LinearLayout>
    </com.chauthai.swipereveallayout.SwipeRevealLayout>
</LinearLayout>

onResume里面的代码使我能够获取更新的更改:

@Override
protected void onResume() {
    super.onResume();
    Log.e("onResume","yes");
    TDataRead();
    customRecycleAdapter.notifyDataSetChanged();

}

这里TdataRead只是我用来获取更新数据以进行通知的方法。

TdataRead的代码:

public void TDataRead() {

        customDataListModelList.clear();
        Cursor cursor = tempSqliteDatabaseHelper.getAllData();
        if (cursor.getCount() == 0) {
            Log.e("No_temp", "No temp Contact Selected");
            return;
        }

        StringBuffer stringBuffer = new StringBuffer();
        while (cursor.moveToNext()) {


            customDataListModelList.add(new CustomDataListModel((cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getInt(4), cursor.getInt(5)));
            stringBuffer.append("Id :" + cursor.getString(0) + "\n");
            stringBuffer.append("Name :" + cursor.getString(1) + "\n");
            stringBuffer.append("Number :" + cursor.getString(2) + "\n");
            stringBuffer.append("color :" + cursor.getString(3) + "\n");
            stringBuffer.append("Font Size :" + cursor.getInt(4) + "\n");
            stringBuffer.append("Index:" + cursor.getInt(5) + "\n");

            Log.e("CustomDataRecord", String.valueOf(customDataListModelList.get(i).Name));

        }

    }

我的解决方案是再次调用onBind方法或通过列表重新加载本身进行某种处理。重新加载意味着再次调用适配器的委托人。我认为这不是正确的方法。如果您还有其他建议可以帮助我。

1 个答案:

答案 0 :(得分:0)

我通过在onResume方法中调用xview.setAdapter(xAdapter)解决了这个问题,这意味着要更新布局,RecyclerView需要更新Adapter的实例。

 @Override
    protected void onResume() {
        super.onResume();
        TDataRead();
        customRecycleAdapter.notifyDataSetChanged();
        recyleview.setAdapter(customRecycleAdapter);

    }