2017-04-15 232 views
-1

我正在开发应用程序,其中Imageview嵌套在用于创建Gridview的Linearlayout中。GridView - Onclick监听器

当用户单击imageview 1然后imageview 2时,如果所有条件都正常,我将imageview 1的图像更改为imageview 2。怎么做?下面

代码,供大家参考

activity_main.xml 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 
<GridView 
    android:id="@+id/gridView1" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:layout_alignParentLeft="true" 
    android:numColumns="8" 
    android:padding="2dp" 
    android:background="@drawable/chessboard" 
    > 

</GridView> 

square.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/imageView1" 
     android:layout_gravity="center" 
     /> 

    </LinearLayout> 

CustomAdapter.java

package com.example.android.chess; 
    import android.content.Context; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.view.ViewGroup; 
    import android.widget.BaseAdapter; 
    import android.widget.ImageView; 
    import android.widget.Toast; 

    public class CustomAdapter extends BaseAdapter{ 

    int [] result; 
    Context context; 
    int [] imageId; 
    private static LayoutInflater inflater=null; 
    public CustomAdapter(MainActivity mainActivity,int[] prgmImages) { 
    // TODO Auto-generated constructor stub 
    result=prgmImages; 
    context=mainActivity; 
    imageId=prgmImages; 
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return result.length; 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

public class Holder 
{ 
    //TextView tv; 
    ImageView img; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    Holder holder=new Holder(); 
    View rowView; 

    rowView = inflater.inflate(R.layout.square, null); 
    //holder.img=(ImageView) rowView.findViewById(R.id.ImagesId); 
    holder.img=(ImageView) rowView.findViewById(R.id.imageView1); 


    // holder.tv.setText(result[position]); 
    holder.img.setImageResource(imageId[position]); 

    rowView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //Toast.makeText(context, "You Clicked "+ v.getBackground(), Toast.LENGTH_LONG).show(); 

      Toast.makeText(context, "You Clicked "+v.getLayoutParams()., Toast.LENGTH_LONG).show(); 
      // TODO Auto-generated method stub 
      //Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show(); 
     } 
    }); 

    return rowView; 
} 


} 
+0

我已经编辑了问题的代码 – Murali

回答

1

@我想获取图像视图,如果一个imageview(内Gridview)是 点击。下面在setOnClickListener方法中,对象v 指向线性布局。如何获取嵌入 内的ImageView,当它被点击时?

试试下面的代码来设置clickListenerImageView

private ViewHolder holder; 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    holder = new Holder(); 
    View rowView; 

    if(rowView==null) 
    { 
     rowView = inflater.inflate(R.layout.square, null); 
     //holder.img=(ImageView) rowView.findViewById(R.id.ImagesId); 
     holder.img=(ImageView) rowView.findViewById(R.id.imageView1); 
     rowView.setTag(holder); 
    } 
    else { 
     holder = (Holder)rowView.getTag(); 
    } 
    // holder.tv.setText(result[position]); 
    holder.img.setImageResource(imageId[position]); 

    holder.img.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "You Clicked the imageView", Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

@Also,能否请您对getView方法解释一下吗?

每当您的GridView创建一行时,都会调用getView()方法。 Here你会发现一个关于这个问题的精美解释的答案。

希望这会有所帮助。

+1

线 - 持有人=(持有人)rowView。 getTag();弹出 错误值不能分配给最终变量“持有人” – Murali

+0

感谢tahsinRupam,我越来越头晕,不理解此代码。 – Murali

+0

这里我想单击一个图像视图,然后单击第二个imageview,如果条件没问题,那么我用imageview1s的图像替换imageview2的图像。清除imageview1的图像,你可以请求帮助 – Murali

1

您不需要只有一个元素的LinearLayout。只需ImageView就可以了。如果您使用的ListView,使用setOnItemSelectedListener

更新#2
这是你应该square.xml怎么看起来像
<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" />

+0

好的我知道了...... – Murali

+0

当我尝试仅在square.xml中放置imageview时,它显示为红色 – Murali