Намеренная проблема: как использовать MainActivity из другого класса «Адаптер» для передачи данных в SecondActivity - PullRequest
0 голосов
/ 17 марта 2019

Это в адаптере. Java

    public void onClick(View v) {
        String name=listItemData.get(i).getName();
        Intent intent = Intent(MainActivity.this, SecondActivity.class);
        intent.putExtra("NAME", name);
    }

Теперь у меня есть идея, как использовать MainActivity.this, когда я не в классе MainActivity.

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Попробуйте следующий код.

Решение 1

Вы должны передать context при инициализации адаптера в MainActivity.

InMainActivity.this:

XyzAdapter adapter = new XyzAdapter(MainActivity.this, .. ..)

В вашем Adapter:

private Context mContext;
   public XyzAdapter(Context context .. ..){
      mContext = context;
   }

И тогда вы можете сделать, как показано ниже:

public void onClick(View v) {
        String name=listItemData.get(i).getName();
        Intent intent = Intent(mContext, SecondActivity.class);
        intent.putExtra("NAME", name);
        mContext.startActivity(intent);
    }

Решение 2

Другой вариант - interface

Создайте interface, как показано ниже:

public interface AdapterInterface {
        public void buttonPressed();
    }

Теперь в вашем адаптере:

AdapterInterface buttonListener;
public XyzAdapter(Context context, AdapterInterface buttonListener)
{
  super(context,c,flags);
  this.buttonListener = buttonListener;
}

public void onClick(View v) {
      buttonListener.buttonPressed()
}

В вашем Activity:

AdapterInterface buttonListener;
public MainActivity extends AppCompactActivity implements AdapterInterface{

в onCreate

buttonListener = this;

XyzAdapter adapter = new XyzAdapter(MainActivity.this, buttonListener  .. ..)



@Override
public void buttonPressed(){
  // here you have to do once your click perform
}
0 голосов
/ 17 марта 2019

Вы можете иметь переменную-член типа Activity в своем классе адаптера (например, private Activity mActivity;) и передать свой экземпляр MainActivity вашему классу адаптера в конструкторе вашего класса адаптера и назначить его для mActivity. Примерно так:

public Adapter(Activity activity) {
    this.mActivity = activity;
}

Тогда в вашем onClick методе:

public void onClick(View v) {
    String name=listItemData.get(i).getName();
    Intent intent = new Intent(mActivity, SecondActivity.class);
    intent.putExtra("NAME", name);
    mActivity.startActivity(intent);
}
...