Как передать команду компоненту другого действия? - PullRequest
0 голосов
/ 01 марта 2020

У меня есть два занятия. Когда элемент в RecyclerView выбран, он переводит пользователя ко второму действию и заполняет детали соответствующим элементом RecyclerView.

Во втором упражнении RecyclerView есть Spinner. В зависимости от элемента, выбранного в счетчике, различные RecyclerViews становятся видимыми / невидимыми для пользователя во время второго действия.

Как мне сделать так, чтобы информация отправлялась из первого действия, чтобы дать команду счетчику, что делать? Так выглядит второе действие

SecondActivity . java

public class SecondActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    private TextView tv_title, tv_description;
    private ImageView PartiesThumbnailImg,PartiesCoverImg;
    private RecyclerView RvPartyMembers;
    private PartyMembersAdapter partyMembersAdapter;

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

        Spinner spinner = findViewById(R.id.spnConstituencies);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.constituencies, android.R.layout.simple_spinner_item);
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       spinner.setAdapter(adapter);
      spinner.setOnItemSelectedListener(this);

        //ini views
        iniViews();

        //Setting up members list
        setupRvPartyMembers();
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        String text = parent.getItemAtPosition(position).toString();
        Toast.makeText(parent.getContext(), text, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }


    void iniViews() {
        RvPartyMembers = findViewById(R.id.rv_party_members);
        String partiesTitle = getIntent().getExtras().getString("title");
        String partiesDescription = getIntent().getExtras().getString("description");
        int imageResourceId = getIntent().getExtras().getInt("imgURL");
        int imagecover = getIntent().getExtras().getInt("imgCover");
        PartiesThumbnailImg = findViewById(R.id.detail_members_img);
        Glide.with(this).load(imageResourceId).into(PartiesThumbnailImg);
        PartiesThumbnailImg.setImageResource(imageResourceId);
        PartiesCoverImg = findViewById(R.id.detail_members_cover);
        Glide.with(this).load(imagecover).into(PartiesCoverImg);
        tv_title = findViewById(R.id.tvPartyTitle);
        tv_title.setText(partiesTitle);
        tv_description = findViewById(R.id.tvPartyDesc);
        tv_description.setText(partiesDescription);
    }

    void setupRvPartyMembers(){
        List<PartyMembers> mdata = new ArrayList<>();
        mdata.add(new PartyMembers("name",R.drawable.members_brendangriffin_fg));
        mdata.add(new PartyMembers("name",R.drawable.members_brendangriffin_fg));
        mdata.add(new PartyMembers("name",R.drawable.members_brendangriffin_fg));

        partyMembersAdapter = new PartyMembersAdapter(this,mdata);
        RvPartyMembers.setAdapter(partyMembersAdapter);
        RvPartyMembers.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));
    }

Это важные части кода FirstActivity. java

 @Override
    public void onPartiesItemClick(PartiesOireachtas partiesOireachtas, ImageView partiesImageView) {


        Intent intent = new Intent(getContext(),PartiesDetailActivity.class);

        intent.putExtra("title", partiesOireachtas.getTitle());
        intent.putExtra("description",partiesOireachtas.getDescription());
        intent.putExtra("imgURL", partiesOireachtas.getThumbnail());
        intent.putExtra("imgCover",partiesOireachtas.getCoverPhoto());

и

Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);




        //RecyclerView Setup
        //int data

        lstPartiesOireachtas = new ArrayList<>();
        lstPartiesOireachtas.add(new PartiesOireachtas("Fianna Fáil", "example1", R.drawable.fianna_fail_logo,R.drawable.fianna_fail_cover));
        lstPartiesOireachtas.add(new PartiesOireachtas("Sinn Féin", "example2", R.drawable.sinn_fein_logo,R.drawable.sinn_fein_cover));
        lstPartiesOireachtas.add(new PartiesOireachtas("Fine Gael", "example4", R.drawable.fine_gael_logo,R.drawable.fine_gael_cover));
        lstPartiesOireachtas.add(new PartiesOireachtas("Green Party", "example9", R.drawable.green_party_logo,R.drawable.green_party_cover));
        lstPartiesOireachtas.add(new PartiesOireachtas("Social Democrats", "example3", R.drawable.soc_dems_logo,R.drawable.soc_dems_cover));
        lstPartiesOireachtas.add(new PartiesOireachtas("Independent", "example2", R.drawable.independent_party_logo,R.drawable.independent_party_cover));

1 Ответ

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

Как вы, вероятно, заметили, у действия нет конструктора по умолчанию, но используется метод onCreate (Bundle saveInstanceState). Это означает, что вы должны передавать свою информацию, используя эти комплекты, или использовать что-то вроде SharedPreferences / SQLite. Поскольку, на мой взгляд, SharedPreferences / SQLite немного излишне для этого, вы можете добавить объект при создании намерения.

Intent intent = new Intent();
intent.putExtra("name", parcelableObject);

Если вы хотите передать пользовательский объект, вам нужно реализовать интерфейс Parcelable, это это довольно просто, поскольку вы можете автоматически сгенерировать весь код для этого в Android studio (просто нажмите alt-enter несколько раз). Для получения дополнительной информации вы можете проверить следующую ссылку.

https://developer.android.com/reference/android/os/Parcelable

В процессе получения вы можете сделать следующее:

Bundle bundle = getIntent().getExtras();
Object object = bundle.getObject("name"); //Don't forget to cast!
...