将onClick监听器添加到gridView项目(根据位置启动唯一意图)

我有一个gridView,我想根据点击项目的位置启动不同的意图。

我已经实例化了以下onClick监听器,其中包含position的值:

gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show(); } }); 

但我相信我需要在其中添加一个if语句来确定根据此位置启动哪个意图。 到目前为止,我已经提出了以下内容,但我不相信它正是我正在寻找的。

 if position = 1 { Intent intent = new Intent(this, Activity1.class); }else if position = 2 { Intent intent = new Intent(this, Activity1.class); } 

任何建议都非常感谢。

/ ** *此活动显示一个带有网格的屏幕,可在其中添加图像并*移动图像。 它还定义了屏幕上可以删除拖动视图的区域。 当对象被拖过这些拖放区域时,将向用户提供反馈。 * *

*与之前版本的DragView示例*应用程序中的DragActivity类似,此处的代码源自Android Launcher代码。 * *

*原始的Launcher代码需要长按(按)才能启动*拖放序列。 如果要查看该行为,请将变量* mLongClickStartsDrag设置为true。 它在下面设置为false,这意味着任何* touch事件都会启动拖放操作。 * * /

 public class DragActivity extends Activity implements View.OnLongClickListener, View.OnClickListener, View.OnTouchListener // , // AdapterView.OnItemClickListener { /** */ // Constants private static final int HIDE_TRASHCAN_MENU_ID = Menu.FIRST; private static final int SHOW_TRASHCAN_MENU_ID = Menu.FIRST + 1; private static final int ADD_OBJECT_MENU_ID = Menu.FIRST + 2; private static final int CHANGE_TOUCH_MODE_MENU_ID = Menu.FIRST + 3; private boolean isErase = true; private EditText et; private TextView tx; /** */ // Variables private DragController mDragController; // Object that handles a drag-drop // sequence. It intersacts with // DragSource and DropTarget // objects. private DragLayer mDragLayer; // The ViewGroup within which an object can be // dragged. private DeleteZone mDeleteZone; // A drop target that is used to remove // objects from the screen. private int mImageCount = 0; // The number of images that have been added to // screen. private ImageCell mLastNewCell = null; // The last ImageCell added to the // screen when Add Image is clicked. private boolean mLongClickStartsDrag = true; // If true, it takes a long // click to start the drag // operation. // Otherwise, any touch // event starts a drag. public static final boolean Debugging = false; // Use this to see extra // toast messages. /** */ // Methods /** * Add a new image so the user can move it around. It shows up in the * image_source_frame part of the screen. * * @param resourceId * int - the resource id of the image to be added */ public void addNewImageToScreen(int resourceId) { if (mLastNewCell != null) mLastNewCell.setVisibility(View.GONE); FrameLayout imageHolder = (FrameLayout) findViewById(R.id.image_source_frame); if (imageHolder != null) { FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, Gravity.CENTER); ImageCell newView = new ImageCell(this); newView.setImageResource(resourceId); imageHolder.addView(newView, lp); newView.mEmpty = false; newView.mCellNumber = -1; mLastNewCell = newView; mImageCount++; // Have this activity listen to touch and click events for the view. newView.setOnClickListener(this); newView.setOnLongClickListener(this); newView.setOnTouchListener(this); } } /** * Add one of the images to the screen so the user has a new image to move * around. See addImageToScreen. * */ public void addNewImageToScreen() { int resourceId = R.drawable.sqwhite; addNewTextToScreen(); int m = mImageCount % 3; if (m == 1) resourceId = R.drawable.sqdrk; else if (m == 2) resourceId = R.drawable.sqwhite; addNewImageToScreen(resourceId); } private void addNewTextToScreen() { // TODO Auto-generated method stub // et.setVisibility(View.VISIBLE); if (isErase) { tx.setText(et.getText().toString()); } else { tx.setText(""); et.setVisibility(View.GONE); } isErase = !isErase; } /** * Handle a click on a view. * */ public void onClick(View v) { if (mLongClickStartsDrag) { // Tell the user that it takes a long click to start dragging. //toast("Press and hold to drag an image."); } } /** * Handle a click of the Add Image button * */ public void onClickAddImage(View v) { addNewImageToScreen(); } /** * onCreate - called when the activity is first created. * * Creates a drag controller and sets up three views so click and long click * on the views are sent to this activity. The onLongClick method starts a * drag sequence. * */ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.demo); et = (EditText) findViewById(R.id.editText1); et.setVisibility(View.INVISIBLE); tx = (TextView) findViewById(R.id.textView1); GridView gridView = (GridView) findViewById(R.id.image_grid_view); if (gridView == null) toast("Unable to find GridView"); else { gridView.setAdapter(new ImageCellAdapter(this)); // gridView.setOnItemClickListener (this); } mDragController = new DragController(this); mDragLayer = (DragLayer) findViewById(R.id.drag_layer); mDragLayer.setDragController(mDragController); mDragLayer.setGridView(gridView); mDragController.setDragListener(mDragLayer); // mDragController.addDropTarget (mDragLayer); mDeleteZone = (DeleteZone) findViewById(R.id.delete_zone_view); // Give the user a little guidance. Toast.makeText(getApplicationContext(), getResources().getString(R.string.instructions), Toast.LENGTH_LONG).show(); } /** * Build a menu for the activity. * */ public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, HIDE_TRASHCAN_MENU_ID, 0, "Hide Trashcan").setShortcut('1', 'c'); menu.add(0, SHOW_TRASHCAN_MENU_ID, 0, "Show Trashcan").setShortcut('2', 'c'); menu.add(0, ADD_OBJECT_MENU_ID, 0, "Add View").setShortcut('9', 'z'); menu.add(0, CHANGE_TOUCH_MODE_MENU_ID, 0, "Change Touch Mode"); return true; } /** * Handle a click of an item in the grid of cells. * */ public void onItemClick(AdapterView parent, View v, int position, long id) { ImageCell i = (ImageCell) v; trace("onItemClick in view: " + i.mCellNumber); } /** * Handle a long click. If mLongClick only is true, this will be the only * way to start a drag operation. * * @param v * View * @return boolean - true indicates that the event was handled */ public boolean onLongClick(View v) { if (mLongClickStartsDrag) { // trace ("onLongClick in view: " + v + " touchMode: " + // v.isInTouchMode ()); // Make sure the drag was started by a long press as opposed to a // long click. // (Note: I got this from the Workspace object in the Android // Launcher code. // I think it is here to ensure that the device is still in touch // mode as we start the drag operation.) if (!v.isInTouchMode()) { toast("isInTouchMode returned false. Try touching the view again."); return false; } return startDrag(v); } // If we get here, return false to indicate that we have not taken care // of the event. return false; } /** * Perform an action in response to a menu item being clicked. * */ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case HIDE_TRASHCAN_MENU_ID: if (mDeleteZone != null) mDeleteZone.setVisibility(View.INVISIBLE); return true; case SHOW_TRASHCAN_MENU_ID: if (mDeleteZone != null) mDeleteZone.setVisibility(View.VISIBLE); return true; case ADD_OBJECT_MENU_ID: // Add a new object to the screen; addNewImageToScreen(); return true; case CHANGE_TOUCH_MODE_MENU_ID: mLongClickStartsDrag = !mLongClickStartsDrag; String message = mLongClickStartsDrag ? "Changed touch mode. Drag now starts on long touch (click)." : "Changed touch mode. Drag now starts on touch (click)."; Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG) .show(); return true; } return super.onOptionsItemSelected(item); } /** * This is the starting point for a drag operation if mLongClickStartsDrag * is false. It looks for the down event that gets generated when a user * touches the screen. Only that initiates the drag-drop sequence. * */ public boolean onTouch(View v, MotionEvent ev) { // If we are configured to start only on a long click, we are not going // to handle any events here. if (mLongClickStartsDrag) return false; boolean handledHere = false; final int action = ev.getAction(); // In the situation where a long click is not needed to initiate a drag, // simply start on the down event. if (action == MotionEvent.ACTION_DOWN) { handledHere = startDrag(v); } return handledHere; } /** * Start dragging a view. * */ public boolean startDrag(View v) { DragSource dragSource = (DragSource) v; // We are starting a drag. Let the DragController handle it. mDragController.startDrag(v, dragSource, dragSource, DragController.DRAG_ACTION_MOVE); return true; } /** * Show a string on the screen via Toast. * * @param msg * String * @return void */ public void toast(String msg) { Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); } // end toast /** * Send a message to the debug log. Also display it using Toast if Debugging * is true. */ public void trace(String msg) { Log.d("DragActivity", msg); if (!Debugging) return; toast(msg); } } // end class 

来自GridView的android文档:

 gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show(); } }); 

编辑:看起来像addNewImageToScreen()是你添加ImageCells的地方,所以假设你可以在那个范围内生成意图。

 Intent intent = new Intent(this, Activity1.class); // or whatever you want to run ImageCell newView = ... newView.setTag( intent ); 

然后在你的onItemClick:public void onItemClick(AdapterView parent,View v,int position,long id){Toast.makeText(HelloGridView.this,“”+ position,Toast.LENGTH_SHORT).show(); Intent intent =(Intent)v.getTag(); //现在你可以用你的意图启动活动..}

使用您的类创建一个字符串数组,在onItemClick()中创建另一个单击位置(item)声明的字符串。

 public class MainActivity extends Activity { String [] classes = {"act1", "act2"}; // activity files GridView gridView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gridView = (GridView) findViewById(R.id.gridView); gridView.setAdapter(new ImageAdapter(this)); gridView.setOnItemClickListener(new OnItemClickListener() { @SuppressWarnings("rawtypes") public void onItemClick(AdapterView parent, View v, int position, long id) { String pos = classes[position]; try { Class start = Class.forName("com.company.app." + pos); //Your package name Intent i = new Intent(MainActivity.this, start); startActivity(i); } catch(ClassNotFoundException e){ e.printStackTrace(); } Toast.makeText( getApplicationContext(), ((TextView) v.findViewById(R.id.label)) .getText(), Toast.LENGTH_SHORT).show(); } }); } }