无法调用Android GridView setOnItemClick(..)



在我的应用程序中,我使用Custom Gridview来显示带文本的图像,但当我使用setOnItemClick(…)点击特定的网格项时,它无法被调用,我在xml文件中的网格视图如下,

  <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_grid.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
}

}

任何帮助我解决这个问题的人,提前感谢。

删除android:focusable="true"android:clickable="true"。如果在行布局中存在可聚焦子级,则不激发onItemClick。试试这个

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

试试这个。。

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

尝试使用

gridView.setClickable(true);

之前

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

相关内容

  • 没有找到相关文章

最新更新