2017-10-17 114 views
0

我使用ScrollView內的ListView。每當我在ListView上執行刪除操作時,數據就會被刪除,但問題在於刪除數據後不幸的應用程序已經停止。我正在使用領域來存儲數據並從領域刪除數據。 這是我的代碼。如何在使用Realm刪除ListView的數據後在scrollView內部刷新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月10日至17日:51:09.717 6586-6586/com.xitiz.xitizmobile E/AndroidRuntime:致命異常:主 工藝:com.xitiz.xitizmobile,PID:6586 顯示java.lang.NullPointerException 在android.view.View.performClick(View.java:4444) at android.view.View $ PerformClick.run(View.java:view.java:4444)在com.itxitiz.xitizmobile.PostUserItineraryActivity $ 7.onClick(PostUserItineraryActivity.java:327) 18440) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:9 5) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5052) at java.lang.reflect.Method.invokeNative(Native Method) 在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 。主要(ZygoteInit.java:612) 在dalvik.system.NativeStart.main(本機方法)

+0

把你的日誌還 –

+0

指定行PostUserItineraryActivity.java:327 –

+0

PostUserItineraryActivity是我Activity類。 – Deepa

回答

0

簡單的方法來做到這將是使PostItinerarySearchCityAdapter extends RealmBaseAdapter<PostUserItinerary>,直接初始化爲RealmResults<PostUserItinerary>,然後刪除您直接撥打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()); 
+0

非常感謝.... – Deepa