如何在 GridView 中的 imageView 中添加单击侦听器?

法尔汗

我是新来的,我在Android上开发了一个简单的Gallery App,所以遇到了一些错误,那么我想和大家分享一下。我的应用中包含的GridView自定义布局适配器,以及自定义布局包含两个imageViews,一种是图像的主图像,另一个是喜欢的图标.the的GridViewsetOnItemClickListener方法去另一个Activity,但我想补充onCLick的方法最喜欢的ImageView

这是一个截图图像

当我运行该应用程序时,出现此错误:

android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick

custom_layout.xml

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

    />

网格适配器.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;
}

}

主活动.java

public class MainActivity extends AppCompatActivity {

GridView gridView;
GridAdapter gridAdapter;
ImageView fav;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);




    gridView=(GridView) findViewById(R.id.gridView1);

    // Adapter class
    gridAdapter=new GridAdapter(MainActivity.this);

    //initializing favourite icon
    fav=(ImageView)findViewById(R.id.favicon);
    gridView.setAdapter(gridAdapter);
    gridView.setFastScrollEnabled(true);

    // gridView setting click listener
    //goes another Activity
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent =new Intent(getApplicationContext(),SliderActivity.class);
            intent.putExtra("index",position);
            startActivity(intent);
        }
    });



}

public void onClickViaMain(View v){
    if (fav.isPressed()){
        Toast.makeText(getApplicationContext(),"Added to Favourites",Toast.LENGTH_SHORT).show();
    }

}

现在,我想MainActivity 中对这个Image View(Favorite)进行onClick,你有什么建议?

44kksharma

好的,我已满足您的要求,请按照此处的步骤操作

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  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从 kotlin 中的 imageview 获取 VectorDrawable 路径单击侦听器事件

gridview中的imageview高度

使gridView中的imageView可单击

如何在IONIC2中添加标记单击侦听器?

如何在onTouch侦听器中检测到单击?

如何在cameraX中添加侦听器以完成焦点

如何在Java中添加按钮侦听器?

如何在 EXTJS 中添加窗口方向侦听器?

gridView中的OnClickItem()如何在单独的imageView中显示同一图像

如何在 SharedPreference 中保存 ImageView 图像并在其他活动(Gridview)中显示?

如何在动态字符串的反应js中事件侦听器或单击侦听器?

如何在 Scala.js 中的单击事件侦听器中检索标签名称?

如何在react js中的材料ui中的列表项上设置单击侦听器

如何向 ReactJs 中的对象数组添加侦听器

如何添加侦听器以删除MongoDB中的函数?

在GridView中混合使用ImageView和VideoView

如何在 JavaScript 中通过单击事件侦听器方法将新引号示例添加到对象现有数组中

如何在Polymer中的自定义元素属性中添加事件侦听器?

如何在文档查看器中的“完成”按钮上添加侦听器

在回调侦听器中设置imageview位图

如何在GridView中添加标题

如何在GridView中实现将ImageView的颜色更改为蓝色突出显示的多项目选择?

如何在日志侦听器中添加一些其他列?

javafx:如何在集成演示中添加适当的侦听器?

如何在我的onClick处理程序中添加键盘侦听器?

如何在 Javascript 中添加带有 HTML 模板文字的事件侦听器?

如何在Hibernate JPA中添加可编程的实体侦听器

如何在jquery的sweetalert对话框中为html按钮添加事件侦听器

如何在“自定义”对话框中添加广播组选中的侦听器