【问题标题】:Not getting multiple intent in one activity在一项活动中没有获得多个意图
【发布时间】:2018-05-28 10:22:34
【问题描述】:

我有两个不同的活动,这两个活动导致一个活动,我正在根据收到的意图设置结果活动的文本但是当我运行应用程序时,我只从第一个活动中获得意图,我在谷歌上搜索相同但不能明白我哪里错了。 我认为条件有一些错误,但如果有人可以在这里指导我,请不要在哪里。 我的 ResultActivity 代码

Bundle extras = getIntent().getExtras();
        if(extras != null) {
            if(extras.containsKey("title")) {
               // title_text = getIntent().getStringExtra("");
                title_text = extras.getString("title");
                toolbar_title.setText(title_text);
            }
        }
        else{

            title_text2 = getIntent().getStringExtra("title2");
            //title_text2 = extras.getString("title2");
            toolbar_title.setText(title_text2);
        }

FirstActivity.class

public void startMoreDetailActivity(){
        Intent startintent = new Intent(this, Main_Page_Details.class);
        startintent.putExtra("title",title_text);
        startActivity(startintent);
    }

SecondActivity(在回收站视图中)

public void startMoreDetailActivity(){
            Intent startintent = new Intent(context, Main_Page_Details.class);
            int position  = getAdapterPosition();
            startintent.putExtra("title2",title_text);
            context.startActivity(startintent);
        }

我的适配器类

    public class SnapAdapter extends RecyclerView.Adapter<SnapAdapter.ViewHolder> implements GravitySnapHelper.SnapListener {

    public static final int VERTICAL = 0;
    public static final int HORIZONTAL = 1;
    private Context context;
    private ArrayList<Snap> mSnaps;
    // Disable touch detection for parent recyclerView if we use vertical nested recyclerViews
    private View.OnTouchListener mTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            v.getParent().requestDisallowInterceptTouchEvent(true);
            return false;
        }
    };

    public SnapAdapter(Context context) {
        mSnaps = new ArrayList<>();
        this.context = context;
    }

    public void addSnap(Snap snap) {
        mSnaps.add(snap);
    }

    @Override
    public int getItemViewType(int position) {
        Snap snap = mSnaps.get(position);
        switch (snap.getGravity()) {
            case Gravity.CENTER_VERTICAL:
                return VERTICAL;
            case Gravity.CENTER_HORIZONTAL:
                return HORIZONTAL;
            case Gravity.START:
                return HORIZONTAL;
            case Gravity.TOP:
                return VERTICAL;
            case Gravity.END:
                return HORIZONTAL;
            case Gravity.BOTTOM:
                return VERTICAL;
        }
        return HORIZONTAL;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = viewType == VERTICAL ? LayoutInflater.from(parent.getContext())
                .inflate(R.layout.adapter_snap_vertical, parent, false)
                : LayoutInflater.from(parent.getContext())
                .inflate(R.layout.adapter_snap, parent, false);

        if (viewType == VERTICAL) {
            view.findViewById(R.id.recyclerView).setOnTouchListener(mTouchListener);
        }

        return new ViewHolder(view,context);

    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Snap snap = mSnaps.get(position);
        holder.snapTextView.setText(snap.getText());

        if (snap.getGravity() == Gravity.START || snap.getGravity() == Gravity.END) {
            holder.recyclerView.setLayoutManager(new LinearLayoutManager(holder
                    .recyclerView.getContext(), LinearLayoutManager.HORIZONTAL, false));
            holder.recyclerView.setOnFlingListener(null);
            new GravitySnapHelper(snap.getGravity(), false, this).attachToRecyclerView(holder.recyclerView);
        } else if (snap.getGravity() == Gravity.CENTER_HORIZONTAL) {
            holder.recyclerView.setLayoutManager(new LinearLayoutManager(holder
                    .recyclerView.getContext(), snap.getGravity() == Gravity.CENTER_HORIZONTAL ?
                    LinearLayoutManager.HORIZONTAL : LinearLayoutManager.VERTICAL, false));
            holder.recyclerView.setOnFlingListener(null);
            new LinearSnapHelper().attachToRecyclerView(holder.recyclerView);
        } else if (snap.getGravity() == Gravity.CENTER) { // Pager snap
            holder.recyclerView.setLayoutManager(new LinearLayoutManager(holder
                    .recyclerView.getContext(), LinearLayoutManager.HORIZONTAL, false));
            holder.recyclerView.setOnFlingListener(null);
            new PagerSnapHelper().attachToRecyclerView(holder.recyclerView);
        } else { // Top / Bottom
            holder.recyclerView.setLayoutManager(new LinearLayoutManager(holder
                    .recyclerView.getContext()));
            holder.recyclerView.setOnFlingListener(null);
            new GravitySnapHelper(snap.getGravity()).attachToRecyclerView(holder.recyclerView);
        }


        holder.recyclerView.setAdapter(new Adapter(snap.getGravity() == Gravity.START
                || snap.getGravity() == Gravity.END
                || snap.getGravity() == Gravity.CENTER_HORIZONTAL,
                snap.getGravity() == Gravity.CENTER, snap.getApps()));
    }

    @Override
    public int getItemCount() {
        return mSnaps.size();
    }

    @Override
    public void onSnap(int position) {
        Log.d("Snapped: ", position + "");
    }

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        public static CustomTextViewMedium snapTextView;
        public RecyclerView recyclerView;
        public ImageView see_more_image2;
        public Context context;
        String title_text;
        public ViewHolder(View itemView, Context context) {

            super(itemView);
            this.context = context;
            snapTextView = (CustomTextViewMedium) itemView.findViewById(R.id.snapTextView);
            recyclerView = (RecyclerView) itemView.findViewById(R.id.recyclerView);
            see_more_image2 = (ImageView)itemView.findViewById(R.id.see_more_image2);
            title_text = snapTextView.getText().toString();
            itemView.setOnClickListener(this);

            see_more_image2.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.see_more_image2:
                startMoreDetailActivity();
            }
        }

        public void startMoreDetailActivity(){
            Intent startintent = new Intent(context, Main_Page_Details.class);
            int position  = getAdapterPosition();
            startintent.putExtra("title",title_text);
            context.startActivity(startintent);
        }
    }
}

【问题讨论】:

  • 还可以从您通过意图发送数据的位置发布您的代码。
  • 如果 extras 为空,为什么还要获取数据?

标签: java android


【解决方案1】:

你做错了..

无需使用两个不同的键传递值。保持它们相同。

第一个活动

public void startMoreDetailActivity(){
    Intent startintent = new Intent(this, Main_Page_Details.class);
    startintent.putExtra("title",title_text);
    startActivity(startintent);
}

第二次活动

public void startMoreDetailActivity(){
    Intent startintent = new Intent(context, Main_Page_Details.class);
    int position  = getAdapterPosition();
    startintent.putExtra("title",title_text);
    context.startActivity(startintent);
}

在你的结果活动中..

title_text = extras.getString("title");
toolbar_title.setText(title_text);

如果你还想按照自己的方式做...

if(getIntent().hasExtra("title")) {
    title_text = getIntent().getStringExtra("title");
    toolbar_title.setText(title_text);
} else {
    title_text2 = getIntent().getStringExtra("title2");
    toolbar_title.setText(title_text2);
}

编辑:

您可以通过以下操作获得位置值。

public void startMoreDetailActivity(){
    Intent startintent = new Intent(context, Main_Page_Details.class);
    title_text = mSnaps.get(getAdapterPosition()).getText();
    startintent.putExtra("title",title_text);
    context.startActivity(startintent);
}

【讨论】:

  • 好的,但你能告诉我如何从 recyclerview 发送 textview 的适配器位置
  • 发布您的适配器
  • 伙计,这不是它的工作原理.. 必须有我的数组列表,您要从中为 textview 设置值,请发布完整的适配器..
  • 嗨,请看我已经添加了完整的适配器类
  • 嗨,兄弟,你能帮我用 pagersnap 助手吗
【解决方案2】:

只有在 intent 为 null 时,您才尝试获取 title2,这就是您没有得到它的原因!

将其更改为以下内容:

Bundle extras = getIntent().getExtras();
    if(extras != null) {
        if(extras.containsKey("title")) {
           // title_text = getIntent().getStringExtra("");
            title_text = extras.getString("title");
            toolbar_title.setText(title_text);
        } else  if(extras.containsKey("title2"){

        title_text2 = getIntent().getStringExtra("title2");
        //title_text2 = extras.getString("title2");
        toolbar_title.setText(title_text2);
        }
    }

如果这不能解决您的问题, 那么如果你能展示你是如何传递意图的,这将有助于更多地理解你的问题。

【讨论】:

  • 嗨,谢谢它的工作,我正在检查 null,还有一件事是我如何获得 mt textview 的适配器位置
  • 我还添加了我发送数据的方式
  • 有多种方法,你能告诉我你想对特定位置的TextView做什么吗?那我可以给你具体的答案吗
  • 你看到第二个活动有一个带有不同项目的recyclerview,当结果活动开始时,不同的项目有不同的标题,它应该与recyclerview项目有相同的标题,这就是为什么
  • 你能告诉我你是如何实现点击 RecyclerView 项目的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多