【问题标题】:How do I pass a command to the component of another activity?如何将命令传递给另一个活动的组件?
【发布时间】:2020-06-14 04:50:25
【问题描述】:

我有两个活动。当 RecyclerView 中的项目被选中时,它会将用户带到第二个活动并使用相关的 RecyclerView 项目填写详细信息。

在第二个 RecyclerView 活动中,有一个 Spinner。根据在微调器中选择的项目,不同的 RecyclerViews 在第二个活动中对用户可见/不可见。

如何使它工作,以便从第一个活动发送信息以命令微调器做什么?This is how Second Activity looks

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));

【问题讨论】:

  • 您可能想查看 Android 架构文章。他们会回答您的问题并解决您稍后会遇到的许多其他问题。

标签: java android android-studio android-activity android-recyclerview


【解决方案1】:

您可能注意到,活动没有默认构造函数,而是使用 onCreate(Bundle savedInstanceState) 方法。这意味着您应该使用此 Bundles 传递您的信息,或者使用 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!

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多