首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >list.notify()引发异常

list.notify()引发异常
EN

Stack Overflow用户
提问于 2018-12-08 18:55:55
回答 1查看 48关注 0票数 0

我必须从我的BaseCardAdapter列表中删除一个对象。这个BaseCardAdapter用于我的SwipeCardView。我试图在按下按钮后移除一个对象。之后,我需要通知适配器一个对象被删除了。不幸的是,我收到了这个错误:

java.lang.IllegalMonitorStateException:在通知()之前未被线程锁定的对象

这是我的密码:

代码语言:javascript
复制
public class FeedAdapter extends BaseCardAdapter {

private ArrayList<EventObject> events;
private Activity activity;
private TextView property1, property2, property3, usernameage;
private ImageView userthumb;

public FeedAdapter(ArrayList<EventObject> events, Activity activity) {
    this.events = events;
    this.activity = activity;
}

@Override
public int getCount() {
    return events.size();
}

@Override
public int getCardLayoutId() {
    return R.layout.model_idea_feed;
}

@Override
public void onBindData(final int position, View cardview) {
    if (events.size() == 0 || events == null){
        return;
    }
    ImageView thumb = cardview.findViewById(R.id.feed_thumb_model);
    userthumb = cardview.findViewById(R.id.feed_profile_thumb);

    final TextView eventname = cardview.findViewById(R.id.feed_name_model);
    usernameage  = cardview.findViewById(R.id.feed_username_model);
    TextView date = cardview.findViewById(R.id.feed_date_model);
    TextView additional = cardview.findViewById(R.id.feed_additional_model);
    TextView address = cardview.findViewById(R.id.feed_adress_model);
    property1 = cardview.findViewById(R.id.feed_property1_model);
    property2 = cardview.findViewById(R.id.feed_property2_model);
    property3 = cardview.findViewById(R.id.feed_property3_model);

    ImageButton save = cardview.findViewById(R.id.feed_savebtn_model);
    ImageButton accept = cardview.findViewById(R.id.feed_accept_model);

    switch(Integer.parseInt(events.get(position).getPosition())) {
        case 0:
          thumb.setBackgroundResource(R.drawable.berlin0);
            break;
        case 1:
           thumb.setBackgroundResource(R.drawable.berlin1);

            break;
        case 2:
            thumb.setBackgroundResource(R.drawable.berlin2);

            break;
        default:
            thumb.setBackgroundResource(R.drawable.berlin2);
            break;
    }

    eventname.setText(events.get(position).getName());
    date.setText(events.get(position).getDate());
    additional.setText(events.get(position).getInfos());
    Geocoder geocoder;
    List<Address> addresses;
    geocoder = new Geocoder(activity, Locale.getDefault());

    try {
        addresses = geocoder.getFromLocation(Double.parseDouble(events.get(position).getLat()),Double.parseDouble(events.get(position).getLng()), 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
        String adderess = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
        String city = addresses.get(0).getLocality();
        String state = addresses.get(0).getAdminArea();
        String country = addresses.get(0).getCountryName();
        String postalCode = addresses.get(0).getPostalCode();
        String knownName = addresses.get(0).getFeatureName();
        address.setText(adderess);
    } catch (IOException e) {
        e.printStackTrace();
    }
    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            events.remove(events.get(position));
      //Here Appears the error:

      events.notify();

        }
    });



}



}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-08 18:58:00

notify()与列表和适配器完全无关。

您需要的是在适配器本身上调用的notifyDataSetChanged(),而不是数据列表。

取代:

代码语言:javascript
复制
events.notify();

通过以下方式:

代码语言:javascript
复制
notifyDataSetChanged();

或者:

代码语言:javascript
复制
notifyItemRemoved(position);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53685863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档