Не удается получить значение int из класса on в другой класс: android studio

#java #android

#java #Android

Вопрос:

Я вроде как новичок в Android. Я хочу получить значение int id (идентификатор динамически генерируемых кнопок) из класса MainPage в класс Note при нажатии кнопки. но значение id всегда обращается к нулю в Note классе.

вот обобщенный код:

Класс MainPage:

 public class MainPage extends AppCompatActivity {
    public int id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for (int j=0; j<allnotes.size(); j  ) {
            //generating buutons          
            final Button preview_text = new Button(this);
            preview_text.setId(j)         
            preview_text.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    //getting id of the clicked button
                    id=v.getId();
                    startActivity(new Intent(MainPage.this, Note.class));
                  
                }
            });
        }
    }
}

 

Класс заметок:

 public class Note extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.note);

        MainPage obj=new MainPage();
        int id=obj.id

        View parentLayout = findViewById(android.R.id.content);
        Snackbar mySnackbar = Snackbar.make(parentLayout,Integer.toString(id) , 10000);
        mySnackbar.show();
    }
 

в сообщении snackbar id всегда равно нулю.

Ответ №1:

Вам нужно добавить идентификатор к намерению, которое вы используете для запуска действия Note. Вы делаете это с помощью Intent.putExtra(…), а в Note вы извлекаете его через GetIntent().getIntExtra(…)

Ответ №2:

Здесь я реализовал ответ @Riccully в вашем коде.

MainPage.java

 preview_text.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //getting id of the clicked button
        id = v.getId();
        Intent intent = new Intent(MainPage.this, Note.class);
        intent.putExtra("id_value", id);
        startActivity(intent);
    }
});
 

Note.java

 @Override
protected void onCreate (Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.note);

    int id = getIntent().getIntExtra("id_value", 0);

    View parentLayout = findViewById(android.R.id.content);
    Snackbar mySnackbar = Snackbar.make(parentLayout, Integer.toString(id), 10000);
    mySnackbar.show();
}
 

Ответ №3:

мы можем сделать это с помощью intent, потому что Android Intent — это сообщение, которое передается между такими компонентами, как действия, поставщики контента, широковещательные приемники, службы и т.д.

В нашем случае мы можем отправить v.getId() в Note.java , Виапутекстра

 intent.putExtra("view_id",v.getId());
 

и получить значение в Note.java с помощью

 getIntent().getIntExtra("view_id", 0);