Android GridView setOnItemClick(...)不能在我的应用程序中调用
我使用自定义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
}
}
任何帮助我解决这个问题, 谢谢在先进。
删除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>
感谢@kaushik现在为我工作+1 – 2014-10-18 07:22:29
尝试使用一个
gridView.setClickable(true);
前
gridView.setOnItemClickListener(new OnItemClickListener() { // it not call
它对我不适用 – 2014-10-18 06:50:01
将您的xml文件发布为包含imageview和textview的gridview的自定义布局 – 2014-10-18 06:56:16
从row_grix.xml中删除这两行android:clickable =“true “ android:focusable =”true“ – 2014-10-18 07:09:29
试试这个..
添加android:descendantFocusability="blocksDescendants"
您父布局在row_grid.xml
尝试此操作后,它也不起作用 – 2014-10-18 06:54:18
@NiravMehta从'row_grid.xml'的'LinearLayout'中删除'android:focusable =“true”'并尝试它。 – Hariharan 2014-10-18 07:07:26
我也试过,但后来也没有工作 – 2014-10-18 07:08:47
后'row_grid'布局 – kId 2014-10-18 06:46:31
看到我row_grix.xml文件 – 2014-10-18 06:57:02
有你定义View.onClickListener()的适配器查看您的CAL无论是在适配器的观点或setOnItemClickListener – 2014-10-18 07:11:25