【问题标题】:How to refresh ListView inside scrollView after delete data of ListView using Realm?使用Realm删除ListView的数据后如何在scrollView中刷新ListView?
【发布时间】:2017-10-17 05:17:26
【问题描述】:

我正在使用 ScrollView 中的 ListView。每当我对 ListView 数据执行删除操作时,数据就会被删除,但问题是在删除数据之后,不幸的是应用程序已停止。我正在使用领域来存储数据并从领域中删除数据。 这是我的代码。

listViewSearchCity.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            PostUserItinerary item = (PostUserItinerary) listViewSearchCity.getItemAtPosition(i);
            view.setBackgroundColor(Color.parseColor("#a9a9a9"));
            // change1();
            h=item.getSearchCity();
            onclick();
            // onitemclick();

        }
    });
public void onclick()
{

    imgDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //PostItinerarySearchCityAdapter adapter = new PostItinerarySearchCityAdapter(PostUserItineraryActivity.this,helper.justRefresh());
            String type =h ;
            final RealmResults<PostUserItinerary> students = realm.where(PostUserItinerary.class).findAll();

            PostUserItinerary postUserItinerary = students.where().equalTo("searchCity", type).findFirst();

            if (postUserItinerary != null) {

                if (!realm.isInTransaction()) {
                    realm.beginTransaction();
                }

                postUserItinerary.deleteFromRealm();
                realm.commitTransaction();
                adapter.notifyDataSetChanged();
               // listViewSearchCity.setAdapter(adapter);

            }
        }
        //final int position2 = holder.getAdapterPosition();



    });

}

这是我的日志节目。

10-17 10:51:09.717 6586-6586/com.xitiz.xitizmobile E/AndroidRuntime: 致命异常: main 进程:com.xitiz.xitizmobile,PID:6586 java.lang.NullPointerException 在 com.xitiz.xitizmobile.PostUserItineraryActivity$7.onClick(PostUserItineraryActivity.java:327) 在 android.view.View.performClick(View.java:4444) 在 android.view.View$PerformClick.run(View.java:18440) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5052) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 把你的日志也放上
  • 指定行 PostUserItineraryActivity.java:327
  • PostUserItineraryActivity 是我的 Activity 类。

标签: android listview realm scrollview


【解决方案1】:

简单的方法是创建PostItinerarySearchCityAdapter extends RealmBaseAdapter&lt;PostUserItinerary&gt;,直接使用RealmResults&lt;PostUserItinerary&gt; 对其进行初始化,然后删除您直接对adapter.notifyDataSetChanged(); 进行的任何调用。

您可以在 Realm 的示例中看到一个示例 ActivityAdapter

class MyListAdapter extends RealmBaseAdapter<PostUserItinerary> implements ListAdapter {

    private static class ViewHolder {
        TextView countText;
        CheckBox deleteCheckBox;
    }

    MyListAdapter(OrderedRealmCollection<Counter> realmResults) {
        super(realmResults);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.row, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.countText = (TextView) convertView.findViewById(R.id.textview);
            viewHolder.deleteCheckBox = (CheckBox) convertView.findViewById(R.id.checkBox);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        final PostUserItinerary item = getItem(position);
        ...
        return convertView;
    }
}

public class ListViewExampleActivity extends AppCompatActivity {

    private Realm realm;
    private MyListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listview);
        realm = Realm.getDefaultInstance();

        // RealmResults are "live" views, that are automatically kept up to date, even when changes happen
        // on a background thread. The RealmBaseAdapter will automatically keep track of changes and will
        // automatically refresh when a change is detected.
        adapter = new MyListAdapter(realm.where(PostUserItinerary.class).findAllAsync());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    相关资源
    最近更新 更多