gpt4 book ai didi

android - BaseAdapter 和 ContextMenu

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:27 24 4
gpt4 key购买 nike

你好 stackoverflow 社区,

基本上,我有画廊使用 gridView + imageView 显示一些图像

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">

<GridView android:id="@+id/PhoneImageGrid"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:numColumns="auto_fit" android:verticalSpacing="12dp"
android:horizontalSpacing="12dp" android:columnWidth="90dp"
android:stretchMode="columnWidth" android:gravity="center" />

<ImageView android:id="@+id/thumbImage" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_centerInParent="true"

android:scaleType="centerCrop"
/>

我想为适配器显示的每个 imageView 使用 setOnLongClick。这很好用,但是,当在 imageView 上长按时,我想显示一个带有一些项目的 ContextMenu(即,你长按一个 imageView,一个 contextMenu 显示一些项目:图像信息,发送这个图像...... ).不幸的是,我不知道如何在适配器中扩充此菜单。(可能不是这样做的好方法)

我的主要 Activity 中有以下几行

_adapter = new ImageAdapter(activity,storedObjects.getAlbums());
imagegrid.setAdapter(_adapter);

我的适配器(删除了一些无用的行)

  public class ImageAdapter extends BaseAdapter {

private Albums albums;
private Context context;
private LayoutInflater inflater;



public ImageAdapter(Context context, Albums albums) {

this.albums = albums;
this.context = context;
inflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
if(albums.getAlbumsListSize() == 0) {
Toast.makeText(context, "There is no album to display", Toast.LENGTH_LONG).show();
}
}




public View getView(final int position, View view, ViewGroup parent) {

ViewHolder holder;

if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.galleryitem, null);
holder.imageview = (ImageView) view.findViewById(R.id.thumbImage);
holder.checkbox = (CheckBox) view.findViewById(R.id.itemCheckBox);
holder.textview = (TextView) view.findViewById(R.id.album_name);
holder.checkbox.setChecked(true);
//Bitmap loadingBM = BitmapFactory.decodeResource(context.getResources(),R.drawable.loading_image);
//holder.imageview.setImageBitmap(loadingBM);
view.setTag(holder);
}

else {
holder = (ViewHolder) view.getTag();
}

holder.imageview.setClickable(true);


holder.imageview.setOnLongClickListener(new OnLongClickListener() {


public boolean onLongClick(View v) {

Log.v(TAG,"onLongClick ok !");
return false;
}

});


imageDownloader.download(this.context, albums.getAllAlbums().get(position).getThumbnailUri(), holder.imageview);


return view;
}

问题:

  1. setOnLongClickListener 工作正常,当我点击一个图像时,我的日志显示在 logcat 中,但是,如何为每个 imageView 创建一个菜单?

显然,我只能在我的主要 Activity 中覆盖 onCreateContextMenu。我想我可以将每个 ImageView 传递给 onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) 但是怎么做呢?

如果你能帮我解决这个问题,我将不胜感激。

非常感谢

佛罗伦特·瓦尔德利耶夫

最佳答案

不是 ImageView 上的 setOnLongClickListener,而是使用 GridView 调用 registerForContextMenu。然后,实现 onCreateContextMenuonContextItemSelected

这是一个简单的 ListActivity,向您展示它是如何工作的。

public class GreetingActivity extends ListActivity {
private static final String[] mGreetings = { "Hello", "Goodbye" };
private static final String[] mPeople = { "Alice", "Bob", "Charlie" };

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mPeople);
setListAdapter(adapter);
ListView listView = getListView();
registerForContextMenu(listView);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
for (int i = 0; i < mGreetings.length; ++i) {
String greeting = mGreetings[i];
menu.add(v.getId(), i, ContextMenu.NONE, "Say " + greeting);
}
}

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo menuInfo
= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int adapterPosition = menuInfo.position;
String person = mPeople[adapterPosition];

int menuItemId = item.getItemId();
String greeting = mGreetings[menuItemId];

String msg = String.format("%s, %s!", greeting, person);
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();

return true;
}
}

关于android - BaseAdapter 和 ContextMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8436250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com