2014-10-18 58 views
0

我使用自定义Gridview来显示带有文本的图像,但是当我点击特定的网格物品时使用setOnItemClick(...)它不能被调用在XML文件中我的网格视图跟随,Android GridView setOnItemClick(...)不能在我的应用程序中调用

<GridView 
    android:id="@+id/gridview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:columnWidth="100dp" 
    android:gravity="center" 
    android:horizontalSpacing="10dp" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="10dp" /> 

,并在我的Java文件活动,

gridView = (GridView) findViewById(R.id.gridview); 
    customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, 
      getData()); 
    gridView.setAdapter(customGridAdapter); 
    System.out.println("call start"); 

    gridView.setOnItemClickListener(new OnItemClickListener() { // it not call 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 
      Toast.makeText(GridCameraPreviewTestActivity.this, 
        position + "Selected", Toast.LENGTH_SHORT).show(); 
      System.out.println("on grid click"); 


       } 
      } 
     } 
    }); 

编辑:

我row_gr id.xml跟随,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginTop="5dp" 
android:orientation="vertical" 
android:padding="5dp" 
android:clickable="true" 
android:background="@drawable/grid_color_selector" 
android:focusable="true" 
> 

<ImageView 
    android:id="@+id/image" 
    android:layout_width="100dp" 
    android:layout_height="100dp" > 
</ImageView> 

<TextView 
    android:id="@+id/text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:gravity="center" 
    android:textSize="12sp" > 
</TextView> 

</LinearLayout> 

编辑2:

我的整个GridCameraPreviewTestActivity是以下几点:

public class GridCameraPreviewTestActivity extends Activity implements 
    AdapterView.OnItemSelectedListener, OnClickListener, 
    OnItemClickListener { 
private ResizableCameraPreview mPreview; 
private ArrayAdapter<String> mAdapter; 
private RelativeLayout mLayout; 
private int mCameraId = 0; 

private GridView gridView; 
private GridViewAdapter customGridAdapter; 
ApplicationInfo packageInfos; 

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

    setContentView(R.layout.gridtest); 

    // Spinner for preview sizes 
    Spinner spinnerSize = (Spinner) findViewById(R.id.spinner_size); 
    mAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item); 
    mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinnerSize.setAdapter(mAdapter); 
    spinnerSize.setOnItemSelectedListener(this); 

    // Spinner for camera ID 
    Spinner spinnerCamera = (Spinner) findViewById(R.id.spinner_camera); 
    ArrayAdapter<String> adapter; 
    adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinnerCamera.setAdapter(adapter); 
    spinnerCamera.setOnItemSelectedListener(this); 
    adapter.add("0"); 
    adapter.add("1"); 
    adapter.add("2"); 

    mLayout = (RelativeLayout) findViewById(R.id.layout); 

    // start 
    gridView = (GridView) findViewById(R.id.gridview); 
    customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, 
      getData()); 
    gridView.setAdapter(customGridAdapter); 
    System.out.println("call start"); 

    gridView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 

      System.out.println("on grid click"); 
      Toast.makeText(GridCameraPreviewTestActivity.this, 
        position + "Selected", Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    System.out.println("call over"); 
} 

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, 
     long id) { 
    Log.w("CameraPreviewTestActivity", "onItemSelected invoked"); 
    Log.w("CameraPreviewTestActivity", "position: " + position); 
    Log.w("CameraPreviewTestActivity", "parent.getId(): " + parent.getId()); 

    switch (parent.getId()) { 
    case R.id.spinner_size: 
     Rect rect = new Rect(); 
     mLayout.getDrawingRect(rect); 

     if (0 == position) { // "Auto" selected 
      mPreview.surfaceChanged(null, 0, rect.width(), rect.height()); 
     } else { 
      mPreview.setPreviewSize(position - 1, rect.width(), 
        rect.height()); 
     } 
     break; 
    case R.id.spinner_camera: 
     mPreview.stop(); 
     mLayout.removeView(mPreview); 
     mCameraId = position; 
     createCameraPreview(); 
     break; 
    } 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 
    // do nothing 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    createCameraPreview(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    mPreview.stop(); 
    mLayout.removeView(mPreview); 
    mPreview = null; 
} 

private void createCameraPreview() { 
    // Set the second argument by your choice. 
    // Usually, 0 for back-facing camera, 1 for front-facing camera. 
    // If the OS is pre-gingerbreak, this does not have any effect. 
    mPreview = new ResizableCameraPreview(this, mCameraId, 
      CameraPreview.LayoutMode.FitToParent, false); 
    LayoutParams previewLayoutParams = new LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    mLayout.addView(mPreview, 0, previewLayoutParams); 

    mAdapter.clear(); 
    mAdapter.add("Auto"); 
    List<Camera.Size> sizes = mPreview.getSupportedPreivewSizes(); 
    for (Camera.Size size : sizes) { 
     mAdapter.add(size.width + " x " + size.height); 

    } 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

} 

private ArrayList<ImageItem> getData() { 

    // other code here 
    } 
    return imageItems; 
} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
    // TODO Auto-generated method stub 

} 

}

任何帮助我解决这个问题, 谢谢在先进。

+0

后'row_grid'布局 – kId 2014-10-18 06:46:31

+0

看到我row_grix.xml文件 – 2014-10-18 06:57:02

+0

有你定义View.onClickListener()的适配器查看您的CAL无论是在适配器的观点或setOnItemClickListener – 2014-10-18 07:11:25

回答

1

删除android:focusable="true"android:clickable="true"。如果行布局中有可调焦的孩子onItemClick未被触发。尝试像trhis

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginTop="5dp" 
android:orientation="vertical" 
android:padding="5dp" 
android:background="@drawable/grid_color_selector" > 

<ImageView 
    android:id="@+id/image" 
    android:layout_width="100dp" 
    android:layout_height="100dp" > 
</ImageView> 

<TextView 
    android:id="@+id/text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:gravity="center" 
    android:textSize="12sp" > 
</TextView> 
</LinearLayout> 
+0

感谢@kaushik现在为我工作+1 – 2014-10-18 07:22:29

-1

尝试使用一个

gridView.setClickable(true); 

gridView.setOnItemClickListener(new OnItemClickListener() { // it not call 
+0

它对我不适用 – 2014-10-18 06:50:01

+0

将您的xml文件发布为包含imageview和textview的gridview的自定义布局 – 2014-10-18 06:56:16

+1

从row_grix.xml中删除这两行android:clickable =“true “ android:focusable =”true“ – 2014-10-18 07:09:29

0

试试这个..

添加android:descendantFocusability="blocksDescendants"父布局row_grid.xml

+0

尝试此操作后,它也不起作用 – 2014-10-18 06:54:18

+0

@NiravMehta从'row_grid.xml'的'LinearLayout'中删除'android:focusable =“true”'并尝试它。 – Hariharan 2014-10-18 07:07:26

+0

我也试过,但后来也没有工作 – 2014-10-18 07:08:47