Как передать намерение из класса Adapter в другое действие, но моя переменная находится в другом действии - PullRequest
1 голос
/ 26 марта 2020

У меня проблема. Я хочу передать свое намерение String «EmailHolder» из «WarehouseActivity» в «ProfilWarehouseActivity», щелкнув элемент в представлении переработчика в моем классе адаптеров, который называется «WarehouseAdapter». Я хочу передать EmailHolder для заполнения моих данных, когда пользователь обновляет данные внутри ProfilWarehouseActivity.

Вот "Намерение" из моего класса "WarehouseActivity":

 private String EmailHolder;

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

        Bundle extras = getIntent().getExtras();
        EmailHolder = extras.getString("emailuser");

Вот как я сделать намерение в классе адаптера "WarehouseAdapter" передать данные идентификатора в "ProfilWarehouseActivity":

@SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(@NonNull WarehouseAdapter.ViewHolder holder, final int position) {

        holder.namaitem.setText(listItems.get(position).get(Konfigurasi_Warehouse.TAG_WAREHOUSENAMA));
        holder.stockitem.setText("Stock : "+listItems.get(position).get(Konfigurasi_Warehouse.TAG_WAREHOUSESTOCK));
        holder.merekitem.setText("Merek : "+listItems.get(position).get(Konfigurasi_Warehouse.TAG_WAREHOUSEMEREK));
        holder.tglin.setText("Tanggal Masuk : "+listItems.get(position).get(Konfigurasi_Warehouse.TAG_WAREHOUSETGLIN));

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v ) {
                String idItem = listItems.get(position).get(Konfigurasi.TAG_ITEMID);

                passid(idItem);
            }
        });
    }

    private void passid(String idItem) {

        Intent intent = new Intent(context, ProfilWarehouseActivity.class);
        intent.putExtra(Konfigurasi_Warehouse.WAREHOUSE_ID,idItem);

        //i think this is for get my EmailHolder from WarehouseActivity to pass it with Intent from this Adapter class

        context.startActivity(intent);

    }

Мой вопрос: как передать намерение с помощью строки "EmailHolder", содержащей значение Intent, через мой WarehouseAdapter (класс адаптера) , но EmailHolder из моей WarehouseActivity?

РЕДАКТИРОВАТЬ: Вот как я использовал класс Adapter из моей WarehouseActivity

            final WarehouseAdapter mAdapter = new WarehouseAdapter( WarehouseActivity.this,list);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(WarehouseActivity.this));
            mRecyclerView.setAdapter(mAdapter);

Ответы [ 4 ]

2 голосов
/ 26 марта 2020

У вас может быть несколько вариантов решения этой проблемы:

Опция 1:

Если вы хотите запустить действие «ProfilWarehouseActivity» из адаптера, тогда вам нужно передать «EmailHolder» из «WarehouseActivity» в адаптер с помощью его конструктора или установщика:

Передача строки в конструктор адаптера

final WarehouseAdapter mAdapter = new WarehouseAdapter( WarehouseActivity.this, list, EmailHolder);

Передача строки с помощью установщика

В операции «ProfilWarehouseActivity»:

mAdapter.setEmailHolder(EmailHolder);

В адаптере WarehouseAdapter:

private String mEmailHolder;
public void setEmailHolder(String emailHolder) {
    this.mEmailHolder = emailHolder;
}

....

private void passid(String idItem) {

    Intent intent = new Intent(context, ProfilWarehouseActivity.class);
    intent.putExtra(Konfigurasi_Warehouse.WAREHOUSE_ID, idItem);
    intent.putExtra("EmailHolder", mEmailHolder);

    //i think this is for get my EmailHolder from WarehouseActivity to pass it with Intent from this Adapter class

    context.startActivity(intent);

}

Вариант 2:

Другой вариант - создать прослушиватель и реализовать его в «ProfilWarehouseActivity», и передать itemId в качестве параметра обратному вызову прослушивателя. Затем пусть ваш «ProfilWarehouseActivity» будет вызывать «WarehouseActivity» вместо WarehouseAdapter при каждом запуске этого прослушивателя.

В адаптере WarehouseAdapter:

public interface ItemClickListener {
    public void onItemClick(int idItem);
}

ItemClickListener mItemClickListener;

public void setItemClickListener(ItemClickListener listener) {
    mItemClickListener = listener;
}

private void passid(String idItem) {
    if (mItemClickListener != null)
        mItemClickListener.onItemClick(idItem);
}

В действии «ProfilWarehouseActivity»:

class ProfilWarehouseActivity extends AppCompatActivity implements WarehouseAdapter.ItemClickListener { 
    private String EmailHolder;

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

        Bundle extras = getIntent().getExtras();
        EmailHolder = extras.getString("emailuser");

    }

    @Override
    onItemClick(int itemId) {
        Intent intent = new Intent(this, ProfilWarehouseActivity.class);
        intent.putExtra(Konfigurasi_Warehouse.WAREHOUSE_ID, idItem);
        intent.putExtra("EmailHolder", EmailHolder);
        startActivity(intent);        
    }   
    ... 

    final WarehouseAdapter mAdapter = new WarehouseAdapter( WarehouseActivity.this,list);
    mAdapter.setItemClickListener(this);

2 голосов
/ 26 марта 2020

Передайте значение emailHolder вашему адаптеру при создании конструктора адаптера. Если я не ошибаюсь, вы можете вызывать адаптер из своей деятельности, поэтому просто передайте значение в качестве параметра конструктора.

wareHouseAdapter = new new WarehouseAdapter( WarehouseActivity.this,list,EmailHolder);

И в WarehouseAdapter

WarehouseAdapter(otherparameter,String emailHolder) {

    this.emailHolder= emailHolder;
}

И при нажатии на пункт утилизацииПросмотреть пункт

 private void passid(String idItem) {

    Intent intent = new Intent(context, ProfilWarehouseActivity.class);
    intent.putExtra(Konfigurasi_Warehouse.WAREHOUSE_ID,idItem);

    //i think this is for get my EmailHolder from WarehouseActivity to pass it with Intent from this Adapter class

   intent.putExtra("emailHolder",emailHolder);


    context.startActivity(intent);

}
0 голосов
/ 26 марта 2020

Для этого у вас есть «интерфейс». Вы также не можете напрямую передавать значение в Конструкторе.

0 голосов
/ 26 марта 2020

я думаю, что случайно нашел ответ (вдохновленный другим ответом до меня, спасибо) ... мне просто нужно установить String "EmailHolder" в "WarehouseActivity" на "publi c stati c":

 public static String EmailHolder;

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

        mRecyclerView = findViewById(R.id.recyclerViewItemWar);

        Bundle extras = getIntent().getExtras();
        EmailHolder = extras.getString("emailuser");

А затем используйте намерение из "WarehouseAdapter", например, так:

 private void passid(String idItem) {

        Intent intent = new Intent(context, ProfilWarehouseActivity.class);
        intent.putExtra(Konfigurasi_Warehouse.WAREHOUSE_ID,idItem);


        intent.putExtra("emailuser",WarehouseActivity.EmailHolder); //i add this


        context.startActivity(intent);
    }

Можно ли поменять String с "private" на "publi c stati c" ..

...