현재 상태 표시 줄 알림 목록을 표시하는 recyclerView
을 만들려고했습니다. 나는 모든 알림을 저장하기 위해 SQLite는 DB를 사용하여 오전 List
사용자 RecyclerView 어댑터에서 notifyDataSetChanged()가 작동하지 않습니다.
public class NotificationItemInformation
{
int iconId,noitId;
String packageName;
Drawable notiIcon;
}
NotificationItemInformation
의 소요 사용자 정의 어댑터 (NotiRecyclerAdapter
를) 만들었습니다. NotificationListenerService
은 알림이 게시되거나 제거 될 때마다 DB에서 쓰고 삭제합니다.
나는 (글로벌 공공 및 내 주요 활동에서 정적) data
라고 NotificationItemInformation
의 List
에 DB의 내용을 읽고 (myDBHelper 내부)
public List<NotificationItemInformation> ReadNotilist (Context context);
라는 방법을 사용합니다. 그 다음 adapter
(내 주요 활동에 전역, 공개 및 정적 임)을 사용하여 data
을 가져오고 메서드 내 RecyclerView
에 내 MainActivity
을 설정합니다.
지금까지 모든 것이 잘 작동합니다. 그리고 에 현재 StatusBar
알림이 표시되어 있습니다.
문제는 활동을 다시 시작할 때까지 목록이 업데이트되지 않는다는 것입니다 (새로운 알림이 오는 경우). 내 NotificationListenerService
의합니다 (DB에 추가 한 후) ... onNotificationPosted
내부
MainActivity.data.clear();
MainActivity.data = dbh.ReadNotilist(this); // dbh is DBhelper object
MainActivity.adapter.notifyDataSetChanged();
을 ... 호출했습니다. 하지만 여전히 활동을 다시 시작할 때까지
RecyclerView
은 업데이트되지 않습니다.
여기가 내 MainActivity
입니다.
public class MainActivity extends AppCompatActivity
{
SQLiteDatabase db;
DBHelper dbh;
RecyclerView notificationIconRecyclerView;
public static NotiRecyclerAdapter adapter;
public static List<NotificationItemInformation> data = Collections.EMPTY_LIST;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbh = new DBHelper(this);
db = dbh.getDb();
notificationIconRecyclerView = (RecyclerView) findViewById(R.id.notificationIconRecyclerView);
data = dbh.ReadNotilist(this);
adapter = new NotiRecyclerAdapter(this,data);
notificationIconRecyclerView.setAdapter(adapter);
notificationIconRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true));
}
}
다음은 데이터 객체에 대한 참조를 재설정하지 마십시오 RecyclerView
public class NotiRecyclerAdapter extends RecyclerView.Adapter<NotiRecyclerAdapter.MyViewHolder>
{
private LayoutInflater inflater;
List<NotificationItemInformation> data = Collections.emptyList();
NotiRecyclerAdapter(Context context, List<NotificationItemInformation> data)
{
inflater = LayoutInflater.from(context);
this.data = data;
}
@Override
public void registerAdapterDataObserver(RecyclerView.AdapterDataObserver observer)
{
super.registerAdapterDataObserver(observer);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View view = inflater.inflate(R.layout.custom_recyclerview_item,parent,false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
NotificationItemInformation current = data.get(position);
holder.recyclerItemIcon.setImageDrawable(current.notiIcon);
}
@Override
public int getItemCount()
{
return data.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
ImageView recyclerItemIcon;
public MyViewHolder(View itemView)
{
super(itemView);
recyclerItemIcon = itemView.findViewById(R.id.notiRecyclerItemIcon);
}
}
}
어댑터의 생성자를보고 싶습니다. 나는 당신이 데이터 목록이나 비슷한 것을 복사하고 있다고 의심합니다. 사실 전체 어댑터 코드가 유용 할 것입니다. –
@BenP. 도움을 주셔서 감사합니다, 지금 질문에 전체 어댑터 코드를 추가했습니다. –