我是新来的,我在Android中开发简单的Gallery App,所以我遇到了一些错误,然后我想和你分享。
我的应用包含 GridView ,自定义布局和适配器,自定义布局包含两个imageViews ,一个是图片是 主要图片 ,另一个是 收藏夹图标 。 GridView 有{{1另一个setOnItemClickListener
的方法,但我想在 收藏的ImageView
Activity
方法
当我运行应用时,我收到了此错误:
onCLick
custom_layout.xml
android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick
GridAdapter.java
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="300dp"
android:layout_height="180dp"
android:id="@+id/imageView"
android:layout_marginTop="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:src="@drawable/xik_1"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/favicon"
android:src="@drawable/ic_favorite_black_24dp"
android:layout_below="@id/imageView"
android:layout_alignParentRight="true"
android:layout_marginTop="-20dp"
android:layout_marginRight="6dp"
android:onClick="onClickViaMain"
/>
}
MainActivity.java
public class GridAdapter extends BaseAdapter {
private int icons[];
// my images here
public int images[]={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.xik_2,R.drawable.xik_3
,R.drawable.xik_1,R.drawable.xik_11,R.drawable.xik_12};
private Context context;
private String letters[];
private LayoutInflater inflater;
public GridAdapter(Context context){
this.context=context;
this.letters=letters;
this.images=images;
}
@Override
public int getCount() {
return images.length;
}
@Override
public Object getItem(int position) {
return images[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View gridView=convertView;
if(convertView==null){
// LayoutInflater
inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// my custom layout
gridView=inflater.inflate(R.layout.custom_layout,null);
}
// images on the gridView (Android icon)
ImageView imageView=(ImageView) gridView.findViewById(R.id.imageView);
imageView.setImageResource(images[position]);
return gridView;
}
现在,我想在 MainActivity 中的图片视图(收藏夹)上执行 onClick ,您会建议我什么?
答案 0 :(得分:0)
好的,我有你的要求,按照这里的步骤
1. remove android:onClick="onClickViaMain" from favicon imageView to avoid crash from xml layout
2. MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
public void onClick(View v) {
// handle click
}
// other code
}
3. public class GridAdapter extends BaseAdapter {
// other code
View.OnClickListener listener;
public GridAdapter(Context context,View.OnClickListener listener){
this.listener=listener;
this.context=context;
this.letters=letters;
this.images=images;
}
// other code here
Inside getView Method of your Adapter do like below
// images on the gridView (Android icon)
ImageView favicon=(ImageView) gridView.findViewById(R.id.favicon);
favicon.setImageResource(images[position]);
**favicon.setOnClickListener(listener);**
4. In Main Activity update line
gridAdapter=new GridAdapter(MainActivity.this);
gridAdapter=new GridAdapter(MainActivity.this,MainActivity.this);
// because we implemented OnclickListener in MainActivity and we are done
答案 1 :(得分:0)
试试这个
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ImageView favImage=(ImageView)view.findViewById(R.id.favImage);
favImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Do your code
Intent intent =new Intent(getApplicationContext(),SliderActivity.class);
intent.putExtra("index",position);
startActivity(intent);
}
});
}
});
您可以像这样实现图像点击活动。 希望这会对你有所帮助......如果你还有任何问题,请告诉我。
答案 2 :(得分:0)
另一种解决方案是 从MainActivity中删除onItemClick方法,并在GridAdapter中实现图像视图的onClick方法
看起来像
public class GridAdapter extends BaseAdapter {
private int icons[];
// my images here
public int images[] =
{R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.xik_2,
R.drawable.xik_3, R.drawable.xik_1, R.drawable.xik_11, R.drawable.xik_12};
private Context context;
private String letters[];
private LayoutInflater inflater;
public GridAdapter(Context context) {
this.context = context;
this.letters = letters;
this.images = images;
}
@Override
public int getCount() {
return images.length;
}
@Override
public Object getItem(int position) {
return images[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View gridView = convertView;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// my custom layout
gridView = inflater.inflate(R.layout.custom_layout, null);
// images on the gridView (Android icon)
ImageView imageView = (ImageView) gridView.findViewById(R.id.imageView);
ImageView favImage=(ImageView) gridView.findViewById(R.id.favicon);
imageView.setImageResource(images[position]);
favImage.setImageResource(images[position]);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, SliderActivity.class);
intent.putExtra("index", position);
context.startActivity(intent);
}
});
favImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, SliderActivity.class);
intent.putExtra("index", position);
context.startActivity(intent);
}
});
return gridView;
}
}
试试这个