-
-
Save udacityandroid/d5826cdde2e0591c0162452f48f6be2d to your computer and use it in GitHub Desktop.
// Find the View that shows the numbers category | |
TextView numbers = (TextView) findViewById(R.id.numbers); | |
// Set a click listener on that View | |
numbers.setOnClickListener(new View.OnClickListener() { | |
// The code in this method will be executed when the numbers View is clicked on. | |
@Override | |
public void onClick(View view) { | |
Intent numbersIntent = new Intent(MainActivity.this, NumbersActivity.class); | |
startActivity(numbersIntent); | |
} | |
}); |
Why do we pass (MainActviity,this, NumbersActivity,class) instead of (this, NumbersActivity.class)
That's because MainActivity.this - is specifying the context clearly. When you are in an inner function it's best to state the context class fully rather than just using the 'this'. thus to help solve any issues that hans to do with scope resolutions.
This work fine
package com.example.android.miwok;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
//attach the listener to the view
TextView numbers = (TextView)findViewById(R.id.numbers);
numbers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent numbersIntent = new Intent(MainActivity.this,NumbersActivity.class);
startActivity(numbersIntent);
}
});
TextView colors = (TextView)findViewById(R.id.colors);
colors.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent colorsIntent = new Intent(MainActivity.this,ColorsActivity.class);
startActivity(colorsIntent);
}
});
TextView family = (TextView)findViewById(R.id.family);
family.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent familyIntent = new Intent(MainActivity.this,FamilyActivity.class);
startActivity(familyIntent);
}
});
TextView phrases = (TextView)findViewById(R.id.phrases);
phrases.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent phrasesIntent = new Intent(MainActivity.this,PhrasesActivity.class);
startActivity(phrasesIntent);
}
});
}
}
I want to share my version of the code:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
//Number Listener
setListenerOpenActivity(findViewById(R.id.numbers),NumbersActivity.class);
setListenerOpenActivity(findViewById(R.id.colors),ColorsActivity.class);
setListenerOpenActivity(findViewById(R.id.phrases),PhrasesActivity.class);
setListenerOpenActivity(findViewById(R.id.family),FamilyActivity.class);
}
public void setListenerOpenActivity (View view, final Class cActivity){
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this,cActivity));
}
});
}
}
When i write this code, the word setOnClickListener becimes red and says cannot resolve symbol. Why is this happening?
write the code inside of onCreate method.
Hi, my code is working just fine without problems.
The only issue is that in the video there is a back button in the title bar, but, is my program there isn't.
Does anyone know why is that happening and how to solve this problem?
for any one faces problems :
- please make sure to paste the code inside onCreate method , otherwise the setOnClickListener will be RED, as below :
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
TextView numbers = (TextView) findViewById(R.id.numbers);
numbers.setOnClickListener(new View.OnClickListener() {
// The code in this method will be executed when the numbers View is clicked on.
@Override
public void onClick(View view) {
Intent numbersIntent = new Intent(MainActivity.this, NumbersActivity.class);
startActivity(numbersIntent);
}
});
2)please make sure that all these imports are in your MainActivity.java
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
Please check if you've pasted this code within the onCreate method.
thank you for the solution. i am sort of curious though, why shall it be within the onCreate method?
I think I'm the only one who things Katherine teaching is way better than the current one.
harshavardhan3199
Me too bro
I want to share my version of the code:
public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the content of the activity to use the activity_main.xml layout file setContentView(R.layout.activity_main); //Number Listener setListenerOpenActivity(findViewById(R.id.numbers),NumbersActivity.class); setListenerOpenActivity(findViewById(R.id.colors),ColorsActivity.class); setListenerOpenActivity(findViewById(R.id.phrases),PhrasesActivity.class); setListenerOpenActivity(findViewById(R.id.family),FamilyActivity.class); } public void setListenerOpenActivity (View view, final Class cActivity){ view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this,cActivity)); } }); }
}
Why do we pass (MainActviity,this, NumbersActivity,class) instead of (this, NumbersActivity.class)
Because we are in the Anonymous inner class. Class inside other class.
put this code into the onCreate method
Question : do we have to copy past the code for all 4 categories ? or is it possible to just build one onclicklistener class and then use it on the 4 different textView objects ?
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
TextView numbers= (TextView)findViewById(R.id.numbers);
TextView phrases = (TextView)findViewById(R.id.phrases);
TextView family = (TextView)findViewById(R.id.family);
TextView colors = (TextView)findViewById(R.id.colors);
numbers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent Numb = new Intent(MainActivity.this, numbersActivity.class);
startActivity(Numb);
}
});
phrases.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent phrase = new Intent(MainActivity.this, phrasesActivity.class);
startActivity(phrase);
}
});
family.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent fam = new Intent(MainActivity.this, familyMembersActivity.class);
startActivity(fam);
}
});
colors.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent col = new Intent(MainActivity.this, colorsActivity.class);
startActivity(col);
}
});
}
}
Here's my code, but I don't like the too much repetition :/ is there like an IF statement or a switch to use to implement this in less lines?
setOnClickListener
same with me
Please check if you've pasted this code within the onCreate method.
Thanks
is anyone lost like me? :(
yes, i don't understand a single word of the video
The first Parameter you are passing is the context of current activity because in case you want to press back after going to the next activity it'll act as a link and the next one is pretty self explanatory (it is passing the class you want to go to after clicking on the view).
Hello, fellow coders.
I am sharing code based on my development environment as below.
I am using Android Studio 4.2.2, Build #AI-202.7660.26.42.7486908, built on June 24, 2021, Runtime version: 11.0.8+10-b944.6842174 amd64, VM: OpenJDK 64-Bit Server VM by N/A
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)
The MainActivity.java code is look like this and it works for me.
Hope this is helpful for someone out there. Happy coding!
``
package com.tutorial.android.miwok;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView numbers = findViewById(R.id.numbers);
numbers.setOnClickListener(view -> {
Intent numbersIntent = new Intent(this, NumbersActivity.class);
startActivity(numbersIntent);
});
TextView family = findViewById(R.id.family);
family.setOnClickListener(view -> {
Intent familyIntent = new Intent(this, FamilyActivity.class);
startActivity(familyIntent);
});
TextView colors = findViewById(R.id.colors);
colors.setOnClickListener(view -> {
Intent colorsIntent = new Intent(this, ColorsActivity.class);
startActivity(colorsIntent);
});
TextView phrases = findViewById(R.id.phrases);
phrases.setOnClickListener(view -> {
Intent phrasesIntent = new Intent(this, PhrasesActivity.class);
startActivity(phrasesIntent);
});
}
}
Note: If you don't want to create a Intent class, you can simply call the Intent constructor INSIDE the startActivity() method, like this:
TextView numbers = findViewById(R.id.numbers);
numbers.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ startActivity(new Intent(MainActivity.this, NumbersActivity.class)); } }); }
This is actually nice
(new View.OnClickListener() please look carefully with this part is it new view or something else?