Clicking button doesn't switch pages in Android - kotlin

Code:
class ProfileFragment : Fragment() {
lateinit var ProfileSetting : ImageView
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
var view = inflater.inflate(R.layout.fragment_profile, container, false)
ProfileSetting = view.findViewById(R.id.imgProfileSetting)
return view
}
}
Clicking the button doesn't switch the page in app.
imgProfileSetting is button.

Your Button does not have any ClickListener, implement it :
ProfileSetting.setOnClickListener {
//Do your stuff
}

Related

How to delete background of rounded corner popup window?

I created a popup window with rounded corners in a fragment but when I open it I can see a dark background behind the popup. Can you tell how to delete it or make ir transparent?
I'm using kotlin.
This is my fragment code (the activity with an image that opens the popup on click):
`
class ProfileFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_profile, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val bpMore: ImageView = view.findViewById(R.id.ic_bp_more)
bpMore.setOnClickListener {
val showPopUp = BadgesPopUpFragment()
showPopUp.show((activity as AppCompatActivity).supportFragmentManager, "showPopUp")
}
}
`
And this is my popup fragment code (popup window):
`
class BadgesPopUpFragment : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_badges_pop_up, container, false)
}
}
`

How to retain EditText values between fragments

I am a novice in Android development. I am currently working in fragments. So basically I am having two fragments each have their own Edittext and buttons. On back press between fragments works fine but when using the button to move to the next fragment the second fragment fails to hold the edit text value. I tried OnSavedInstance it doesn't help me.
FirstFragment.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_first, container, false)
view.findViewById<Button>(R.id.btn1).setOnClickListener {
ediText1 = view.findViewById<EditText>(R.id.et1).text.toString()
Toast.makeText(activity?.baseContext,ediText1,Toast.LENGTH_SHORT).show()
Navigation.findNavController(view).navigate(R.id.action_firstFragment_to_secondFragment)
}
return view
}
SecondFragment.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_second, container, false)
view.findViewById<Button>(R.id.btn2).setOnClickListener {
ediText2 = view.findViewById<EditText>(R.id.et2).text.toString()
Toast.makeText(activity?.baseContext,ediText2, Toast.LENGTH_SHORT).show()
Navigation.findNavController(view).navigate(R.id.action_secondFragment_to_thirdFragment) }
return view
}
There are many ways to retain the values, most easy is to use ViewModel , since you are using Navigation Components , ViewModel can be scoped to navGraph , see this

How do I add an actionbar menu in my fragment using Kotlin

How do I add an actionbar menu in my fragments using Kotlin? When I run the code below nothing shows up.
class Fragment1: Fragment() {
private lateinit var fview: View
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,
savedInstanceState: Bundle?
): View?{
// Inflate the layout for this fragment
dissview = inflater.inflate(R.layout.fragment_dissability, container, false)
setHasOptionsMenu(true)
return fview
}//end on create
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.mainmenu, menu);
super.onCreateOptionsMenu(menu, inflater)
}

Get data from AlertDialog "itself"

I'm currently trying to open an AlertDialog where some data will be displayed inside it.
class AlertsDialogRemi : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.alerts_dialog, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val alerts = arrayOf("AlertsDialogRemi 1", "AlertsDialogRemi 2", "AlertsDialogRemi 3")
for(alert in alerts){
Log.i(TAG, "Alert : $alert")
}}
And I call it from this (MainActivity):
fun showDialog(){
mydialog = Dialog(this, R.style.DialogCustomTheme)
mydialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
mydialog.setContentView(R.layout.alerts_dialog_remi)
mydialog.create()
txt = mydialog.findViewById(R.id.close_modal_alerte)
txt.isEnabled = true
txt.setOnClickListener{
mydialog.cancel()
}
mydialog.show()
}
When I open the fragment as a real fragment, I can my alerts. But when I open it as a Dialog, I don't see the alerts (but I have the layout displayed)
How can I get my alerts inside my AlertDialog (as a Dialog thanks to showDialog())?
This dialog has nothing to do with the AlertsDialogRemi class.
Declare the setOnShowListener for the dialog, before mydialog.show(), and put the code you want to execute when the dialog is shown inside the lambda:
mydialog.setOnShowListener {
//write your code here
}
setOnShowListener
public void setOnShowListener(DialogInterface.OnShowListener listener)
Sets a listener invoked when the dialog is shown.

no event OnClickListener in fragment button kotlin

I am working kotlin. I have a fragment on my Activity . l want when click on button inside of fragment activity go to another activity .
this code my used in fragment class
class fragment_Arr :Fragment(), View.OnClickListener {
override fun onClick(v: View?) {
val intent = Intent(activity, FlightDeatilasDep::class.java)
startActivity(intent)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_arrivel,container,false)
loadmorefilghtsbeforday.setOnClickListener{this}
}
}
when l debug app and click on button no event happening !
loadmorefilghtsbeforday.setOnClickListener{} body of the lambda is empty - nothing happen.
Please register your listener by
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_arrivel,container,false)
loadmorefilghtsbeforday.setOnClickListener(this)
return view
}
or if you prefer using lambdas
loadmorefilghtsbeforday.setOnClickListener{ onClick(null) } could be called but then your fragment don't need to implements View.OnClickListener.
and class names in Kotlin/java should start from capital later: FragmentArr.
_ is not recommended