#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.