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

时间:2017-10-01 19:51:52

标签: android email android-intent android-recyclerview

正如你可以看到我的代码的某些部分,我对Android和Java非常陌生,但是代码看起来像专业人士一样糟糕,它正在做我想要的事情到目前为止(我我相信我会到达那里......哈哈)。我有一个带有回收站视图的自定义适配器。有一些文本视图。我还有一个带有电子邮件按钮的底部菜单,我想使用其中两个视图(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);
        }
    }
}
}

2 个答案:

答案 0 :(得分: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);  

那到底是什么:

你应该为你的模型类制作3个“get”方法,返回“String”类型

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

希望它会对你有所帮助!问是否有任何问题。

答案 1 :(得分:0)

如果要将这两个视图值传递给主要活动 1.在您的活动中创建一个包含2个参数的方法 2.在列表上设置单击侦听器并onClick只使用视图参数调用循环视图的方法。在onClick方法中写入 ((your_activity_name)context).methodName(这里的参数);

希望这会对你有所帮助

感谢!!!