使用Realm删除ListView的数据后如何在scrollView中刷新ListView?
How to refresh ListView inside scrollView after delete data of ListView using Realm?
我正在使用 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: FATAL EXCEPTION: main
Process: com.xitiz.xitizmobile, PID: 6586
java.lang.NullPointerException
at com.xitiz.xitizmobile.PostUserItineraryActivity.onClick(PostUserItineraryActivity.java:327)
at android.view.View.performClick(View.java:4444)
at android.view.View$PerformClick.run(View.java:18440)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5052)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
at dalvik.system.NativeStart.main(Native Method)
最简单的方法是制作 PostItinerarySearchCityAdapter extends RealmBaseAdapter<PostUserItinerary>
,直接用 RealmResults<PostUserItinerary>
初始化它,然后删除您直接对 adapter.notifyDataSetChanged();
.[=16= 进行的任何调用]
您可以在 Realm 的示例中查看示例 Activity and Adapter。
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());
我正在使用 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: FATAL EXCEPTION: main Process: com.xitiz.xitizmobile, PID: 6586 java.lang.NullPointerException at com.xitiz.xitizmobile.PostUserItineraryActivity.onClick(PostUserItineraryActivity.java:327) at android.view.View.performClick(View.java:4444) at android.view.View$PerformClick.run(View.java:18440) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5052) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) at dalvik.system.NativeStart.main(Native Method)
最简单的方法是制作 PostItinerarySearchCityAdapter extends RealmBaseAdapter<PostUserItinerary>
,直接用 RealmResults<PostUserItinerary>
初始化它,然后删除您直接对 adapter.notifyDataSetChanged();
.[=16= 进行的任何调用]
您可以在 Realm 的示例中查看示例 Activity and Adapter。
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());