Can not detect objects in xml - Kotlin - android-studio

I create a button on main layout then it's unable to be detected in main activity.
Please let me know how do I fix this issue.
Note: Android Studio 4.1.1.1 and Kotlin

You cannot access the button directly. You need to attach it to a variable with access to the button.
val newButton = findViewById<Button>(R.id.btnHelp);
newButton.setOnClickListener(){
println(2+2)
}
The first line creates a variable and attaches it to the button ID.
The second line connects the click listener.

Related

Switch from fragment to activity in android studio

I made an application where I integrated the tabbed activity. In the tabbed activity I put 3 fragments. Now in the 3rd fragment I put a button and I want when I click on the button it redirects me to a new activity I did. I used an intent as we usually do between activities but it doesn't work. Need help please
use getContext instade of Activity.this. use the below code in your button to redirect from fragment to activity
yourButton.setOnClickListener(view -> {
startActivity(new Intent(getContext(), Your_Activity.class));
});
If the problem is not solved yet, let me know with logcat error.

NSInvalidArgumentException error in button click - xamarin

I have been following the "Hello, iPhone" tutorial available in xamarin website. I have completed all the steps now. Now, I run the application and click on the "Action 1" button I am getting this error
Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[HelloWorld_iPhoneViewController actionButtonClick:]: unrecognized selector sent to instance 0xb3a5a30
How can I fix this issue ? I am using the latest versions of MonoDevelop + MonoTouch
static void Main (string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main (args, null, "AppDelegate"); <-- HERE
}
my code uploaded to here
If you look at the connections for the button (in Xcode) you'll see that you've added 2 actions to the button - one called actionButtonClick and one called actnButtonClick.
In the controller, MonoTouch appears to have only added a partial method for the second action which isn't the one that is crashing.
I deleted the action called actionButtonClick (leaving actnButtonClick) and ran your sample which ran fine.
In the "Xamarin Cross-platform Application Development" book by Jonathan Peppers I ran into the same "very newby" problem with his "Hello Phone" example.
This is what I did to fix it.
First, I switched into Xamarin Studio,
clicked on the MainStoryboard.storyboard file or tab (to show the phone layout),
clicked on the "button" within the layout, to display its "Properties" in the lower right window.
Then I selected "Events" within the "Properties" window (from the buttons showing "Widget", "Layout", "Events".
Lastly, under the item called "Up Inside" there was a small "x" available to delete the event handler that was listed there -- which I recall was named button_TouchUpInside (or something like that).
The example code (page 25 of the book) is adding an event handler for the button, so this other handler is an extra (unwritten?) one, and removing reference to it made the example work fine.
Just open the storyboard file with the source code editor and remove any connection that you don't want listed under the button.
<button ...>
.
.
.
<connections>
<!-- remove any connections here that you don't want -->
</connections>
</button>

Programmatically changing tabs in a Monotouch app

Forgive me for my ignorance, as I'm new to Monotouch and I'm sure this is a simple thing but I can't find the answer anywhere.
I have an iPhone app in Monotouch that uses a UITabBarController for root navigation. It is defined in it's own class file. There is also a separate view controller class file for the content of each tab. So tab1 shows viewcontroller1, tab2 shows viewcontroller2, etc.
I want a user to be able to click on button1 inside of viewcontroller1 and have the app take them to tab2 and show viewcontroller2.
I have an event handled for the click of button1 and I can do things like pop up alerts when it's clicked, but I can't figure out how to get the tab bar to be accessible for me to call it. Please help!
Edit: I need to know not only how to make it accessible, but I also don't know what method to call to make it change.
When you create your "child" view controllers, pass in a reference to the "parent" tab controller. Then you child can call a method on it's parent to update the current tab index.
something like
btn1.TouchUpInside += (sender, args) => TabBarController.SelectedIndex = 0 ;

hardcoded string “Button”, should use #string resource

I am new in Android app development and using Java language.
My problem is every time I make a TextView or Button there is a triangle with the exclamation mark below them.
and when I click it I saw a message saying:
hardcoded string “Button”, should use #string resource
I have two activities, in my main activity there is a Button that when you click it you will go in second activity.
But when I go to my main.java to make a code for the button. There's always the above shown error. I think the eclipse can't find the id of my button and same for my TextView they have same error message.
Here is the code I made:
Button b = FindViewById(R.id.button1);
I also add:
Button b = (Button) FindViewById(R.id.button1);
I am using the latest eclipse classic and ADT august issue. The platform is Android 4.1 API 16.
You shouldn't hardcode the "text" on the widgets use the strings resources ie., strings in the strings.xml to set the text. Declare the "text" you want to display as a string in strings.xml and access it using #string/your_string_name in the layout file.
Notice the id of the button, which is rounded in red. You have to use this id when you want to call it in a method, for an example
Button b = (Button) FindViewById(R.id.button1);
Furthermore, check whether your graphical layout matches with the image I have provided.
Just try your code again with these changes.
Your main.java would look like this.
I am a newbie too, but I believe I got this. So basically what's happening here, java wants you to put your hardcodes in string.xml. so that when accessing it, you will use the given methods below before:
.
But this is how it should be.
Let's start by string.xml
Then come back to your activity_main.xml

How does MonoTouch autogenerate XIB code behind?

I'm a C# programmer dabbling in a bit of iPhone development using MonoTouch.
I add a new View Interface Definition to my project and double click to open it up in Interface Builder. I add a UIButton. I save the file, and inspect the xib.designer.cs file, and I can see no reference to the new button.
I downloaded the code from http://monotouchexamples.com/ where I could see an example of autogenerated code behind :
[MonoTouch.Foundation.Connect("infoButton")]
private MonoTouch.UIKit.UIButton infoButton {
get {
return ((MonoTouch.UIKit.UIButton)(this.GetNativeField("infoButton")));
}
set {
this.SetNativeField("infoButton", value);
}
}
I opened up MainWindow.xib in interface builder. I notice a few differences. File's Owner is of type UIApplication instead of NSObject. What is the importance of this? There is an App Delegate object of type AppDelegate. I can't add an AppDelegate to my own view, or at least I can't find it in the Library. Do I need to add one? I can see that the existing controls on MainWindow.xib have Referencing Outlets to the App Delegate. I add a new button and I want to hook it up. When I click and drag a New Referencing Outlet to the App Delegate a context menu appears that lists the existing controls. How do I add a new element to this list, or where does this list come from?
I've been spoilt by the Visual Studio world where I just dump a button on a form and start writing code for the click event. Could someone provide some pointers about the steps needed to get this working on MonoTouch?
Thanks,
Patrick
Adding a button by itself is not enough. The button is not accessible outside the Interface Builder. You need add an Outlet, and connect the button with the outlet in Interface Builder.
Remember: Outlets are the members in your Controller class that get a reference to the controls, you can't just access the controls without them.
As Dave says, you need to add an outlet to your controller class, and connect your button to that outlet, before any auto-generated code will appear. This caught me out too initially.
You choose your controller class in the Interface Builder library window, choose 'outlets' in the bottom part of the library, and add an outlet there. You then need to select your button, choose the connections tab of the inspector window, and drag from the "New referencing outlet" circle over to your controller class. Interface Builder will then prompt you to choose an outlet to connect to. Then when you save, you should get the auto-generated code appear in the .xib.designer.cs file, and then you should be able to reference your button via that outlet variable in your .xib.cs file.
It sounds like the project I created is out of date - I remember there were quite a few changes around how the generated buttons are created in the designer file. I will update the project soon for you.
As Dave said, to get the code to be auto generated you need to add an outlet with Interface Builder. There should be an example on this video here - http://bit.ly/aWoItN but the server seems to be down at the moment.
Hope this helps,
ChrisNTR

Resources