问题描述
在我的项目中,我想在接到来电时实时更新我的 recyclerView 并更新我的 sqlite 数据库。我怎样才能做到这一点?
对于我的代码,我必须重新打开主要活动才能刷新 recyclerView。
如果您需要额外的代码,请询问
主要活动:
public class MainActivity extends AppCompatActivity
{
private ArrayList<PhoneNumber> contacts;
private RecyclerView recyclerView;
private RecyclerViewAdapter rcAdapter;
private DBHandler dbHandler;
IntentFilter intentFilter;
CallReceiver callReceiver;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHandler = new DBHandler(MainActivity.this);
contacts = new ArrayList<>();
intentFilter = new IntentFilter();
callReceiver = new CallReceiver();
contacts = dbHandler.getAllContacts();
rcAdapter = new RecyclerViewAdapter(contacts,this);
recyclerView = findViewById(R.id.my_recycler_view);
linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(this,RecyclerView.VERTICAL,false);
recyclerView.setLayoutManager(linearlayoutmanager);
recyclerView.setAdapter(rcAdapter);
intentFilter.addAction("android.intent.action.PHONE_STATE");
intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL");
registerReceiver(callReceiver,intentFilter);
}
}
呼叫接收者:
public class CallReceiver extends PhonecallReceiver{
@Override
protected void onIncomingCallStarted(Context ctx,String number,Date start) {
notifyAboutTheIncomingNumber(number,ctx);
}
@Override
protected void onOutgoingCallStarted(Context ctx,Date start) {
}
@Override
protected void onIncomingCallEnded(Context ctx,Date start,Date end) {
}
@Override
protected void onOutgoingCallEnded(Context ctx,Date end) {
}
@Override
protected void onMissedCall(Context ctx,Date missed) {
}
private void notifyAboutTheIncomingNumber(String number,Context context)
{
new Thread(new Runnable()
{
@Override
public void run() {
Extractrating exrating = new ExtractExtractrating();
Notification not = new Notification();
DBHandler dbHandler = new DBHandler(context);
String rating = exrating.getPhoneNumberrating(number);
not.showNotification(number,rating,context);
dbHandler.addPhoneNumber(number,rating);
}
}).start();
}
}
RecyclerViewAdapter:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
// variable for our array list and context
private ArrayList<PhoneNumber> courseModalArrayList;
private Context context;
// constructor
public RecyclerViewAdapter(ArrayList<PhoneNumber> courseModalArrayList,Context context)
{
this.courseModalArrayList = courseModalArrayList;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType)
{
// on below line we are inflating our layout
// file for our recycler view items.
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.phone_number_item,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position)
{
// on below line we are setting data
// to our views of recycler view item.
PhoneNumber model = courseModalArrayList.get(position);
holder.phoneNumberTextView.setText(model.getPhoneNumber());
holder.phoneratingTextView.setText(model.getrating());
}
@Override
public int getItemCount()
{
// returning the size of our array list
return courseModalArrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder
{
// creating variables for our text views.
private TextView phoneNumberTextView,phoneratingTextView;
public ViewHolder(@NonNull View itemView)
{
super(itemView);
// initializing our text views
// Todo: 3/17/2021 rename
phoneNumberTextView= itemView.findViewById(R.id.idPhoneNumber);
phoneratingTextView= itemView.findViewById(R.id.idrating);
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)