如何从电子邮件意图中的回收站视图中获取两个文本视图?

Posted

技术标签:

【中文标题】如何从电子邮件意图中的回收站视图中获取两个文本视图?【英文标题】:How do I get two textviews from recycler view in email intent? 【发布时间】:2018-03-12 23:31:37 【问题描述】:

正如您在查看我的代码的某些部分所看到的那样,我对 android 和 Java 非常陌生,但是对于专业人士来说,尽管代码看起来很糟糕,但到目前为止它正在做我希望它做的事情(我是当然我会到达那里......大声笑)。我有一个带有回收器视图的自定义适配器。有一些文本视图。我还有一个带有电子邮件按钮的底部菜单,我想使用 2 个视图(R.id.brand_name 和 R.id.cases_text_view)并将它们作为电子邮件意图中的文本发送。底部菜单和电子邮件意图在原处工作,但我不知道如何将两个文本视图调用到 EXTRA_TEXT。请帮帮我。 还有一件事:谢谢你们所有人,如果不是这个网站和你们的帮助,我就不会使用这个应用程序。对此,我真的非常感激。

这是带有底部菜单和电子邮件意图的类:

                  public class BlackLabel extends brands 

private RecyclerView recyclerView;
//private String modelArrayList;
//private Context ctx;
public static ArrayList<Model> modelArrayList;
private CustomAdapter customAdapter;
//private Button btnnext;

// supossing to have an image called ic_play inside my drawables.

public String[] brandlist = new String[]
        "Black Label 340ml NRB (85023)",
        "Black Label 330ml Cans (85736)",
        "Black label 500ml Cans (85023)",
        "Black Label 440ml NRB (86798)",
        "Black Label 330ml RB (85556)",
        "Black Label 750ml RB (85021)",
        "Black Label 340ml NRB 12 Pack (87009)",
        "Black Label 500ml Cans 12 Pack (85022)";

public int[] pallet_size = 
        84,
        127,
        81,
        80,
        120,
        70,
        132,
        90;

public int[] myimage = 
        R.drawable.black_label,
        R.drawable.brutal_fruit,
        R.drawable.castle_lager,
        R.drawable.flying_fish,
        R.drawable.castle_lite,
        R.drawable.hansa,
        R.drawable.lion_lager,
        R.drawable.milk_stout;

protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.order_by_brand);
    setTitle("Black Label");

    recyclerView = (RecyclerView) findViewById(R.id.recycler);

    modelArrayList = getModel();
    customAdapter = new CustomAdapter(this);
    recyclerView.setAdapter(customAdapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));

private ArrayList<Model> getModel() 
    final ArrayList<Model> list = new ArrayList<>();
    for (int i = 0; i < 8; i++) 

        final Model model = new Model();
        model.setNumber(0);
        model.setNumber2(0);
        model.setImage(myimage[i]);
        model.setBrand(brandlist[i]);
        model.setPallet_size(pallet_size[i]);
        list.add(model);

    BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavView_Bar);
    BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
    Menu menu = bottomNavigationView.getMenu();
    MenuItem menuItem = menu.getItem(0);
    menuItem.setChecked(true);

    bottomNavigationView.setOnNavigationItemSelectedListener(

            new BottomNavigationView.OnNavigationItemSelectedListener() 
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) 
                    switch (item.getItemId()) 
                        case R.id.ic_home:
                            Intent intent1 = new Intent(BlackLabel.this, MainActivity.class);
                            startActivity(intent1);
                            break;

                        case R.id.ic_clear:
                            Intent intent2 = new Intent(BlackLabel.this, BlackLabel.class);
                            startActivity(intent2);
                            break;

                        case R.id.ic_email:
                        Intent intent = new Intent(Intent.ACTION_SENDTO);
                                intent.setData(Uri.parse("mailto:who@where.co.za"));
                                intent.putExtra(Intent.EXTRA_SUBJECT, "Please place order for....");
                                intent.putExtra(Intent.EXTRA_TEXT, "Here I want some text from the adapter.");
                                startActivity(intent);
                    
                    return false;
                

            );

    return list;
     

这是我的自定义适配器:

             public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> 

private LayoutInflater inflater;
private Context ctx;

public CustomAdapter(Context ctx) 

    inflater = LayoutInflater.from(ctx);
    this.ctx = ctx;


@Override
public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    View view = inflater.inflate(R.layout.rv_item, parent, false);
    MyViewHolder holder = new MyViewHolder(view);

    return holder;


@Override
public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) 

    holder.tvBrand.setText((CharSequence) modelArrayList.get(position).getBrand());
    holder.tvImage.setImageResource(Integer.parseInt(String.valueOf(modelArrayList.get(position).getImage())));
    holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber()));
    holder.tvPallet_size.setText(String.valueOf(modelArrayList.get(position).getPallet_size()));
    holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber2()));
    holder.tvPallets.setText(String.valueOf(modelArrayList.get(position).getNumber()));
    holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber2()));


@Override
public int getItemCount() 
    return modelArrayList.size();


class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener

    protected Button btn_cases_plus, btn_cases_minus, btn_pallets_plus, btn_pallets_minus;
    protected ImageView tvImage;
    private TextView tvBrand, tvCases,tvPallets, tvPallet_size;

    public MyViewHolder(View itemView) 
        super(itemView);

        tvBrand = (TextView) itemView.findViewById(R.id.brand_name);
        tvImage = (ImageView) itemView.findViewById(R.id.beer_logo);
        tvCases = (TextView) itemView.findViewById(R.id.cases_text_view);
        tvPallet_size = (TextView) itemView.findViewById(R.id.pallets_size);
        tvPallets = (TextView) itemView.findViewById(R.id.pallets_text_view);
        btn_cases_plus = (Button) itemView.findViewById(R.id.casePlus1);
        btn_cases_minus = (Button) itemView.findViewById(R.id.caseMinus1);
        btn_pallets_plus = (Button) itemView.findViewById(R.id.palletsPlus1);
        btn_pallets_minus = (Button) itemView.findViewById(R.id.palletsMinus1);

        btn_cases_plus.setTag(R.integer.btn_cases_plus_view, itemView);
        btn_cases_minus.setTag(R.integer.btn_cases_minus_view, itemView);
        btn_cases_plus.setOnClickListener(this);
        btn_cases_minus.setOnClickListener(this);
        btn_pallets_plus.setTag(R.integer.btn_pallets_plus_view, itemView);
        btn_pallets_minus.setTag(R.integer.btn_pallets_minus_view, itemView);
        btn_pallets_plus.setOnClickListener(this);
        btn_pallets_minus.setOnClickListener(this);
    
    // onClick Listener for view
    @Override
    public void onClick(View v) 

        if (v.getId() == btn_cases_plus.getId())

            View tempview = (View) btn_cases_plus.getTag(R.integer.btn_cases_plus_view);
            TextView tvCases = (TextView) tempview.findViewById(R.id.cases_text_view);
            int number = Integer.parseInt(tvCases.getText().toString()) + 1;
            tvCases.setText(String.valueOf(number));
            modelArrayList.get(getAdapterPosition()).setNumber(number);

         else if(v.getId() == btn_cases_minus.getId()) 

            View tempview = (View) btn_cases_minus.getTag(R.integer.btn_cases_minus_view);
            TextView tvCases = (TextView) tempview.findViewById(R.id.cases_text_view);
            int number = Integer.parseInt(tvCases.getText().toString()) - 1;
            if (number == 0 || number <0) 
                Toast.makeText(ctx,"You cannot order less than one case", Toast.LENGTH_SHORT).show();
                tvCases.setText(String.valueOf(0));
                return;
            
            tvCases.setText(String.valueOf(number));
            modelArrayList.get(getAdapterPosition()).setNumber(number);

          else if(v.getId() == btn_pallets_plus.getId()) 

            View tempview = (View) btn_pallets_plus.getTag(R.integer.btn_pallets_plus_view);
            TextView tvPallets = (TextView) tempview.findViewById(R.id.pallets_text_view);
            TextView tvCases = (TextView) tempview.findViewById(R.id.cases_text_view);
            TextView tvPallet_size = (TextView) tempview.findViewById(R.id.pallets_size);
            int number = Integer.parseInt(tvPallets.getText().toString()) + 1;
            tvPallets.setText(String.valueOf(number));
            int number2 = Integer.parseInt(tvPallets.getText().toString()) * Integer.parseInt(tvPallet_size.getText().toString());
            tvCases.setText(String.valueOf(number2));
            modelArrayList.get(getAdapterPosition()).setNumber(number);
            modelArrayList.get(getAdapterPosition()).setNumber2(number2);

           else if(v.getId() == btn_pallets_minus.getId()) 

            View tempview = (View) btn_pallets_minus.getTag(R.integer.btn_pallets_minus_view);
            TextView tvPallets = (TextView) tempview.findViewById(R.id.pallets_text_view);
            TextView tvCases = (TextView) tempview.findViewById(R.id.cases_text_view);
            TextView tvPallet_size = (TextView) tempview.findViewById(R.id.pallets_size);
            int number = Integer.parseInt(tvPallets.getText().toString()) - 1;
            tvPallets.setText(String.valueOf(number));
            int number2 = Integer.parseInt(tvPallets.getText().toString()) * Integer.parseInt(tvPallet_size.getText().toString());
            tvCases.setText(String.valueOf(number2));
            if (number == 0 || number <0) 
                Toast.makeText(ctx,"You cannot order less than one pallet", Toast.LENGTH_SHORT).show();
                tvCases.setText(String.valueOf(0));
                tvPallets.setText(String.valueOf(0));
            
            modelArrayList.get(getAdapterPosition()).setNumber(number);
            modelArrayList.get(getAdapterPosition()).setNumber2(number2);
        
    


【问题讨论】:

您想将来自 R.id.brand_name 和 R.id.cases_text_view 视图的文本放在意图中吗? "intent.putExtra(Intent.EXTRA_TEXT, "这里我想要一些来自适配器的文本。");" ? 是的 Anton,我想将两个文本视图(R.id.brand_name 和 R.id.cases_text_view)中的值放入该意图中,但我不知道如何调用它们。 【参考方案1】:

这是你的代码

 Intent intent = new Intent(Intent.ACTION_SENDTO);
                                intent.setData(Uri.parse("mailto:who@where.co.za"));
                                intent.putExtra(Intent.EXTRA_SUBJECT, "Please place order for....");
                                intent.putExtra(Intent.EXTRA_TEXT, "Here I want some text from the adapter.");
                                startActivity(intent);

尝试做下一件事。首先,我真的不知道为什么你没有在这部分代码之后完成循环,但是好的,让我们开始吧。

 private ArrayList<Model> getModel() 
    final ArrayList<Model> list = new ArrayList<>();
    for (int i = 0; i < 8; i++) 

        final Model model = new Model();
        model.setNumber(0);
        model.setNumber2(0);
        model.setImage(myimage[i]);
        model.setBrand(brandlist[i]);
        model.setPallet_size(pallet_size[i]);
        list.add(model);

因此,在循环的每次迭代中,您都会获得设置属性的模型对象。因此,您可以仅从模型中获取数据,例如 model.getBrand()。我不知道你的应用程序中的“案例”(R.id.cases_text_view)是什么,但我认为它设置在这里

 model.setNumber(0);
        model.setNumber2(0);  

所以只要得到这个数字就像

model.getNumber();  model.getNumber2(0);  

那么到底是什么:

您应该为返回“String”类型的模型类创建 3 个“get”方法

getBrand()
getNumber()
getNumber2()

然后只需添加下一个代码:

Intent intent = new Intent(Intent.ACTION_SENDTO);
String extraData = model.getBrand() + getNumber() getNumber2();
                                intent.setData(Uri.parse("mailto:who@where.co.za"));
                                intent.putExtra(Intent.EXTRA_SUBJECT, "Please place order for....");
                                intent.putExtra(Intent.EXTRA_TEXT, extraData);
                                startActivity(intent);

希望对你有帮助!有什么事就问。

【讨论】:

非常感谢。这是正确的答案。它一直在我面前。我取得了不错的进展,至少它现在显示了一些东西,虽然只是 arraylist 上的最后一个产品,但不是全部。 我现在已经这样做了,但我不知道该放在哪里。模型.getBrand();模型.getNumber();模型.getNumber2(); class Model 私有字符串品牌;私人 int number2; public String getBrand() 返回品牌; public int getNumber2() 返回 number2; 再次非常感谢您。 把你模型类的代码给我,我会帮你的。 我希望你能以这种方式做到这一点。 model.getBrand();模型.getNumber();模型.getNumber2(); class Model 私有字符串品牌;私人 int number2; public String getBrand() return model.getBrand(); public int getNumber2() return model.getNumber2(); 【参考方案2】:

如果您想将这两个视图值传递给主要活动 1. 在您的活动中创建一个带有 2 个参数的方法 2.在您的列表上设置点击监听器,onClick 只需使用视图参数调用回收视图的该方法。在您的 onClick 方法中写入 ((your_activity_name)context).methodName(参数在这里);

希望对你有帮助

谢谢!!!

【讨论】:

Anamica 谢谢你,我明白你的意思了,我已经尝试了两天了,但不能正确。您能否再给我一些指示或示例。请大大大大。谢谢。 你能给我你的方法,以便我可以帮助你更多。 public void submitOrder(View view) EditText textName = (EditText) findViewById(R.id.brand_name); String naam = textName.getText().toString(); EditText textQuant = (EditText) findViewByID(R.id.cases_text_view); String hoeveel = textQuant.getText().toString();和私有字符串 createOrderSummary(String naam, String hoeveel) String orderMessage = "Brand" + naam; orderMessage += "数量" + hoeveel;退货订单信息; 然后我会在意图中调用 orderMessage.. 但它给了我“无法解析符号'findViewById(int)”。如果我想在意图中添加 orderMessage,那就是问题 1. 和 mainActivity 中的第二个:intent.putExtra(Intent.EXTRA_TEXT, orderMessage);它还告诉我它无法在那里解析符号。因此,即使我可以修复 findViewById 问题,我仍然不知道如何在我的意图中调用它。希望这足以让我看看我正在尝试什么,也许你可以帮助我。再次感谢您。 您是输入了所有内容还是从您的代码中复制了...因为那里有一个拼写错误

以上是关于如何从电子邮件意图中的回收站视图中获取两个文本视图?的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 中的嵌套查询填充回收站视图

如何从回收站视图 android 中传递一个 url onclick 项目并 onclick 获取位置 dipaly 在另一个活动中的 url

如何从具有多个视图的 ListView 中的 EditText 获取文本?

如何从服务器加载回收站视图中的更多数据?

使用sqlite意图后如何从listview中获取项目名称?

如何从视图控制器获取自绘视图中的文本