从适配器

时间:2017-10-04 12:31:20

标签: java android gridview adapter

我的活动中有一个GridView。我在GridView中有2个元素。一个是ImageView和一个TextView。

我想只在单击ImageView时执行某些操作,请记住我希望在活动中发生这种情况,而不是在GridView适配器中。

现在我有一个适配器,我可以在其中使用ImageView来调用getView()中的click操作,但我不希望这样。我希望在我打电话时不活动,

GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this, items));

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

        //THIS WORKS FINE
        String string = ((TextView) v.findViewById(R.id.text)).getText().toString();
        Log.d("string",string);

        //THE PROBLEM OCCURS HERE
        ImageView capture = (ImageView) v.findViewById(R.id.capture);
        capture.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                }
            });
}

//问题在这里发生

当我第一次单击ImageView时,应该发生的操作不会发生。相反,它会在第二次点击时发生。

这是我遇到问题的地方。我希望在第一次点击时发生此操作,而不是第二次点击。

4 个答案:

答案 0 :(得分:0)

在您的活动中创建一个方法。

现在,在适配器中,onClick使用

调用该方法
((Activityname)context).methodname(parameters);

答案 1 :(得分:0)

您可以看到代码块 -

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

    String string = ((TextView) v.findViewById(R.id.text)).getText().toString();
    Log.d("string",string);

    //THE PROBLEM OCCURS HERE
    ImageView capture = (ImageView) v.findViewById(R.id.capture);
    capture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
}

您的imageview 捕获正在点击gridview后添加任何操作。因此,在第一次单击它之后执行,然后将click listener设置为imageview,然后单击其执行其onClick块。更好的是,在适配器内处理imageview点击事件。

您可以从适配器类调用活动内部的方法,但是您应该在适配器类中实现setOnClickListener

答案 2 :(得分:0)

在界面的帮助下,你可以做一件事创建一个界面并在你的活动上实现它并获得imageview点击适配器,这里启动界面,你将获得活动内的点击

答案 3 :(得分:0)

我认为问题在于,在第一次点击时,您只需在imageView上设置 OnClickListener,因此不会调用其onClick()方法。在第二次单击时,由于已设置侦听器,因此调用onClick()

每次点击网格中的某个项目(顺便说一句都没有任何意义)时,您不应该为imageView设置新的监听器,而应该执行以下任一操作:

如果必须以相同的方式处理每个项目中的imageView,请在创建视图时将OnClickListener设置为适配器中的imageView。

如果没有,请将用于处理imageView单击的界面传递给适配器的构造函数,然后在活动中,在创建适配器时实现此接口。