Member 13366692 Ответов: 0

Создать уведомление, когда listview получает новый элемент


Я создал приложение для получения данных из базы данных на веб-сайте и просмотра их в listview , я хочу, когда listview получает некоторые новые данные , чтобы создать уведомление, поэтому для этого я создаю метод обновления listview каждые x секунд, но он не работает, он просто создает уведомления повторно . чтобы узнать, получает ли listview новый элемент, я сравниваю старый размер listview с новым, если это то же самое, я ничего не делаю, иначе я создаю уведомление. Мой код :
public class NotificationFragment extends Fragment {
Button loginButton;
//List<DataModel> listItems;
ArrayList<String> listItems=new ArrayList<String>();
List<DataModel> DataModelList;
ListView listView;
public static final String Colloge_section="MyPrefs";
public NotificationFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_notification, container, false);
    DataModelList = new ArrayList<>();
    listView =(ListView)view.findViewById(R.id.listview1);
    TextView name = (TextView)view.findViewById(R.id.name);
    buadd();
    new Timer().scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            buadd();

        }
    }, 0, 7000);//put here time 1000 milliseconds=1 second
    final SwipeRefreshLayout pullToRefresh = (SwipeRefreshLayout)view.findViewById(R.id.swipe_container);
    pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            DataModelList.clear();
            buadd();
            pullToRefresh.setRefreshing(false);
        }
    });
    return view;
}
public void buadd(){

    Thread runt=new Thread(){
        public void run(){
            CallNotservice cweb=new CallNotservice();
            cweb.OpenNotifications();}
    };
    runt.start();
    try{
        runt.join();
        String [] lst1=(ContactResult.ArrayMessage).split("&");
        MyListAdapter adapter = new MyListAdapter(getActivity(), R.layout.row, DataModelList);
        for (int i=lst1.length-1 ;i>=1;i--) {
            DataModelList.add(new DataModel(lst1[i]));
        }
        listView.setAdapter(adapter);

    }
    catch(Exception ex){
    }
    notifyThis("تطبيق جامعة كرري", "هنالك اشعار جديد , اضغط هنا لفتح التطبيق");

}
public void notifyThis(String title, String message) {
    SharedPreferences prfs = getActivity().getSharedPreferences("MyPrefs", MODE_PRIVATE);
    int Astatus = prfs.getInt("new_notify", 0);

    try {
        if (listView.getAdapter().getCount() != Astatus) {
            SharedPreferences.Editor editor = getActivity().getSharedPreferences(Colloge_section, MODE_PRIVATE).edit();
            editor.putInt("new_notify", listView.getAdapter().getCount());
            editor.apply();

        }
    }
    catch (Exception e){
        Toast.makeText(getContext(),"لاتوجد إشعارات جديده",Toast.LENGTH_LONG).show();
    }

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getContext());
    mBuilder.setAutoCancel(true)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setTicker("{هنالك اشعار جديد في لوحة الاشعارات.}")
            .setContentTitle(title)
            .setContentText(message)
            .setSmallIcon(R.drawable.icon)
            .setContentInfo("تنبيه !");
    Intent notificationIntent = new Intent(getContext(), KworldActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(getContext(), 0, notificationIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(contentIntent);
    NotificationManager mNotificationManager =

            (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);

            mNotificationManager.notify(001, mBuilder.build());
}
}


Что я уже пробовал:

используйте doInBackground вместо таймера

David Crow

Ваш подход не самый оптимальный и эффективный. Я предлагаю использовать CursorLoader См . обсуждение здесь для того, как работает уведомление, чтобы вам не приходилось тратить циклы процессора на опрос хранилища данных.

В то время как у меня есть статья CP, которая демонстрирует это, плюс тонна других вещей, которые вам придется пропалывать, есть тонны других доступных, которые специфичны для CursorLoader и как он уведомляет "автоматически."

Member 13366692

вы можете мне в этом помочь?

0 Ответов