السلام عليكم ورحمة الله وبركاته, أنا لدي تطبيق مربوط على Fire Base ويتم سحب البيانات الى recycler-view موجودة في صفحة من fragment وكل ما أضغط على رقم معين يتم أرسالي الى fragment اخرى لأكمال بقية الخبر وبحمد الله التطبيق يعمل بشكل جيد, لكن الأن أنا اريد أضافة أشعار الى التطبيق كل ما أريد أن أضيف child ومعلوماتة الى fire base وأريد ان أسحب فقط العنوان و ملخص الخبر وأضافتهم الى الاشعار وأريد أيضا كل ما أضغط على أشعار معين يتم ارسالى الى fragment الخبر وليس الصفحة التي يتواجد بها recycler-view !!. هل هناك طريقة معينه لتنفيذ هذه الفكرة؟ علما بأني جربت طريقتي لكن الاشعار وحدة من يظهر بدون العنوان او الملخص وايضا ولا يتم فتح البرنامج عند الضغط على الاشعار؟
الذي أريدة هو :
أشعار في كل وقت أضيف فيه child جديد الى fire base يحتوي على title و description ويتم أرسالة مباشرة
كل ما يتم الضغط على الاشعار يتم توجيه المستخدم الى صفحة الخبر
ملاحظة : أنا أستخدم navigation graph في التنقل بين الملفات و save args في نقل البيانات
- تستطيع استخدام java او kotlin ان أردت
class MyApp
classMyApp():Application(){
val n_ID_Channel ="أشعار اخر الأخبار"
override fun onCreate(){
super.onCreate()
createNotificationChannel()}
fun createNotificationChannel(){if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.O){
val channel_name ="أشعار صفحة الأخبار"
val description_text ="القسم الخاص لأشعارات صفحة الأخبار"
val name = channel_name
val text = description_text
val importance =NotificationManager.IMPORTANCE_HIGH
val channel =NotificationChannel(n_ID_Channel, name, importance).apply {
description = text
}
val notificationManager :NotificationManager=
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)}}}
LatestNewsFragment
classLatestNewsFragment:Fragment(){private lateinit var news_list:ArrayList<NewsListViewModel>private lateinit var mRef:DatabaseReferenceprivate lateinit var recyclerView:RecyclerViewprivate lateinit var progress :ProgressBarprivate lateinit var layout :LinearLayoutprivate lateinit var pendingIntent:PendingIntent
override fun onCreateView(
inflater:LayoutInflater, container:ViewGroup?,
savedInstanceState:Bundle?):View?{// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_latest_news, container,false)return view
}
override fun onViewCreated(view:View, savedInstanceState:Bundle?){
super.onViewCreated(view, savedInstanceState)
recyclerView = view.findViewById<RecyclerView>(R.id.newsList)
recyclerView.layoutManager =LinearLayoutManager(
context,LinearLayoutManager.VERTICAL,false)
news_list = arrayListOf<NewsListViewModel>()
progress = view.findViewById(R.id.progress_news)
layout = view.findViewById(R.id.progress_layout)}
override fun onStart(){
realTimeNewsDataBase(requireView())
val refresh = view?.findViewById<SwipeRefreshLayout>(R.id.refresh_layout)
refresh?.setOnRefreshListener(object :SwipeRefreshLayout.OnRefreshListener{
override fun onRefresh(){
realTimeNewsDataBase(requireView())
refresh.isRefreshing =false}})
super.onStart()}
fun realTimeNewsDataBase(view:View){
progress.visibility =View.VISIBLE
val data_base =FirebaseDatabase.getInstance()
mRef = data_base.getReference("LatestNews")
mRef.addValueEventListener(object :ValueEventListener{
override fun onDataChange(snapshot:DataSnapshot){
news_list.clear()if(snapshot.exists()){for(list in snapshot.children){
var data =list.getValue(NewsListViewModel::class.java)
news_list.add(0,data!!)
progress.visibility =View.GONE
}
val adapter =NewsListAdapter(
requireContext(),
news_list, view
)
recyclerView.adapter = adapter
}}
override fun onCancelled(error:DatabaseError){Log.w(TAG,"onCancelled", error.toException())Toast.makeText(context,"${error.message}",Toast.LENGTH_SHORT).show()
progress.visibility =View.GONE
}})
mRef.addChildEventListener(object :ChildEventListener{
override fun onChildAdded(snapshot:DataSnapshot, previousChildName:String?){// من المفترض هنا يتم ارسال الاشعار الى التطبيق عند اضافة بيانات جديدة
val data =NewsListViewModel()
N_NotifictionData(data.title, data.desc)}
override fun onChildChanged(snapshot:DataSnapshot, previousChildName:String?){Toast.makeText(context,"${previousChildName} was changed",Toast.LENGTH_SHORT).show()}
override fun onChildRemoved(snapshot:DataSnapshot){Toast.makeText(context,"$snapshot was removed",Toast.LENGTH_SHORT).show()}
override fun onChildMoved(snapshot:DataSnapshot, previousChildName:String?){Toast.makeText(context,"${previousChildName} was moved",Toast.LENGTH_SHORT).show()}
override fun onCancelled(error:DatabaseError){Toast.makeText(context,"${error.message} was changed",Toast.LENGTH_SHORT).show()}})}
fun N_NotifictionData( title :String?= null, desc :String?= null){
val i =Intent(requireContext(),NewsDetailFragment::class.java).apply {
flags =Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
pendingIntent =PendingIntent.getActivity(requireContext(),0, i,0)
val builder =NotificationCompat.Builder(requireContext(),MyApp().n_ID_Channel).setSmallIcon(R.drawable.ic_email).setContentTitle(title).setContentText(desc).setPriority(NotificationCompat.PRIORITY_HIGH).setDefaults(NotificationCompat.DEFAULT_ALL).setContentIntent(pendingIntent).setAutoCancel(true)
with(NotificationManagerCompat.from(requireContext())){
notify(1, builder.build())}}}
NewsDetailsFragment
package com.gazelle.wadifatk.newsList
import android.os.Bundleimport androidx.fragment.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.ImageViewimport android.widget.TextViewimport android.widget.Toastimport androidx.navigation.fragment.navArgs
import com.bumptech.glide.Glideimport com.gazelle.wadifatk.OverLoadimport com.gazelle.wadifatk.R
import com.klinker.android.link_builder.Linkimport com.klinker.android.link_builder.applyLinks
import java.text.DateFormatimport java.util.*// TODO: Rename parameter arguments, choose names that match// the fragment initialization parameters, e.g. ARG_ITEM_NUMBERclassNewsDetailFragment:Fragment(){
val args:NewsDetailFragmentArgs by navArgs()private lateinit var overLoad :OverLoadprivate lateinit var share :ImageView
override fun onCreateView(
inflater:LayoutInflater, container:ViewGroup?,
savedInstanceState:Bundle?):View?{// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_news_detail, container,false)}
override fun onViewCreated(view:View, savedInstanceState:Bundle?){
super.onViewCreated(view, savedInstanceState)
overLoad =OverLoad(requireContext())
val text = view.findViewById<TextView>(R.id.information_text)
val image = view.findViewById<ImageView>(R.id.image_view)
val title = view.findViewById<TextView>(R.id.title_news)
val date = view.findViewById<TextView>(R.id.date_news)
val type = view.findViewById<TextView>(R.id.type_news)
val desc = view.findViewById<TextView>(R.id.desc_news)
val details = view.findViewById<TextView>(R.id.news_details)
share = view.findViewById(R.id.share_N)
val image1 = args.newsDataList.image
Glide.with(view).load(image1).into(image)
val title1 = args.newsDataList.title
title.text =""+ title1
val date1 = args.newsDataList.date
date.text =""+ date1
val type1 = args.newsDataList.type
type.text = type1
val desc1 = args.newsDataList.desc
desc.text = desc1
val details1 = args.newsDataList.details
details.text = details1
}}
السؤال
عبدالرحمن العنزي4
السلام عليكم ورحمة الله وبركاته, أنا لدي تطبيق مربوط على Fire Base ويتم سحب البيانات الى recycler-view موجودة في صفحة من fragment وكل ما أضغط على رقم معين يتم أرسالي الى fragment اخرى لأكمال بقية الخبر وبحمد الله التطبيق يعمل بشكل جيد, لكن الأن أنا اريد أضافة أشعار الى التطبيق كل ما أريد أن أضيف child ومعلوماتة الى fire base وأريد ان أسحب فقط العنوان و ملخص الخبر وأضافتهم الى الاشعار وأريد أيضا كل ما أضغط على أشعار معين يتم ارسالى الى fragment الخبر وليس الصفحة التي يتواجد بها recycler-view !!. هل هناك طريقة معينه لتنفيذ هذه الفكرة؟ علما بأني جربت طريقتي لكن الاشعار وحدة من يظهر بدون العنوان او الملخص وايضا ولا يتم فتح البرنامج عند الضغط على الاشعار؟
الذي أريدة هو :
ملاحظة : أنا أستخدم navigation graph في التنقل بين الملفات و save args في نقل البيانات
- تستطيع استخدام java او kotlin ان أردت
class MyApp
LatestNewsFragment
NewsDetailsFragment
وهذه صورة للأشعار
0 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.