Android: как отформатировать GetIntent().getIntExtra

#android #android-intent

#Android #android-намерение

Вопрос:

Я пытаюсь получить файл ресурсов изображения в другом классе, намерение putExtra было помещено в MainActivity, но я не уверен, как получить его в другом классе? Я пробовал GetIntent().getIntExtra(«категория», search_name); но я просто получаю ошибки. Идея заключается в том, что пользователь нажимает на фотографию категории рецептов, а затем в другом классе я могу сопоставить этот файл изображения ресурса с именем категории и получить соответствующие рецепты.

Кроме того, этот просмотр сетки замедляет работу приложения, как бы я обернул и вызвал это в асинхронном режиме?

MainActivity

 GridView gv = findViewById(R.id.gridview);
        gv.setAdapter(new SetImageAdapter(this));
        gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {

                Intent intent = new Intent(MainActivity.this, Category.class);
                intent.putExtra("Category", SetImageAdapter.categories[position]); // put image data in Intent
                startActivity(intent); // start Intent

            }
        });
  

Адаптер GridView

 package com.stu54259.plan2cook;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class SetImageAdapter extends BaseAdapter {
    public static Integer[] categories = {
            R.drawable.african, R.drawable.american,
            R.drawable.asian, R.drawable.comfort,
            R.drawable.desserts, R.drawable.greek,
            R.drawable.italian, R.drawable.vegetarian,
            R.drawable.mexican,

    };
    private Context Cont;
    public SetImageAdapter(Context c) {
        Cont = c;
    }
    public int getCount() {
        return categories.length;
    }
    public Object getItem(int position) {
        return null;
    }
    public long getItemId(int position) {
        return 0;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imgview = new ImageView(Cont);
        imgview.setLayoutParams(new GridView.LayoutParams(370, 250));
        imgview.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imgview.setPadding(10,10,10, 10);
        imgview.setImageResource(categories[position]);
        return imgview;

    }

}
  

Ответ №1:

В вашем MainActivity :

 GridView gv = findViewById(R.id.gridview);
        gv.setAdapter(new SetImageAdapter(this));
        gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {

                Intent intent = new Intent(MainActivity.this, Category.class);
                intent.putExtra("CategoryPosition", position); // put image data in Intent
                startActivity(intent); // start Intent

            }
        });
  

В вашей категории активность :

 int position = getIntent().getIntExtra("CategoryPosition",0);
int selectedDrawable = SetImageAdapter.categories[position];
//Get name of the selected drawable : 
String search_name =  getResources().getResourceEntryName(selectedDrawable);
  

Возможной причиной GridView низкой производительности является размер drawable ресурса, убедитесь, что все используемые изображения имеют небольшое разрешение, а также меньший размер.

Комментарии:

1. Спасибо, я реализовал это и думал примерно так: int position = GetIntent().getIntExtra(«CategoryPosition»,0); int selectedDrawable = SetImageAdapter.categories[позиция]; if (selectedDrawable == 0) { search_name = «african»; Log.d(«Название категории», search_name); } else if (selectedDrawable == 1) { search_name = «американский»; } else if (selectedDrawable == 2) { search_name = «азиатский»; } и т. Д. Может работать, но это не так.. Преобразованные изображения в webp тоже не помогают.

2. @Revansardenпожалуйста, объясните подробнее, чего вы хотите сейчас достичь? Вы хотите получить имя выбранного drawable , например, если выбранным drawable является R.drawable.african то, что вы хотите search_name , чтобы оно было африканским ?

3. Итак, чего я хочу добиться, так это того, что я хочу установить для переменной search_name значение african, asian, mexican и т. Д. В зависимости от позиции, нажатой на gridview.

4. @RevansArden Я обновил свой ответ, пожалуйста, проверьте его

5. Этот вид работ отображает только результаты позиции 0.