2017-04-15 1 views
-1

私は、ImageviewがGridviewを作成するために使用されるLinearlayoutでネストされているアプリケーションに取り組んでいます。GridView - Onclickリスナー

ユーザーがimageview 1をクリックしてからimageview 2をクリックすると、すべての条件がOKであれば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

のようになります方法ですsetOnItemSelectedListener

UPDATE#2
を使用し、私は疑問に、コードの – Murali

答えて

1

@画像ビュー(Gridview内)が の場合、Imageviewを取得します。ここでは、setOnClickListenerメソッドのオブジェクトv が直線レイアウトを指しています。 の中に入れ子にされたImageViewをクリックすると、それをクリックするとどうなりますか?

あなたImageViewclickListenerを設定するには、以下のコードを試してみてください:

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メソッドについて説明していただけますか?

getView()のメソッドは、GridViewの行が作成されるたびに呼び出されます。 Hereこの問題に関して美しく説明された回答が見つかります。

これが役に立ちます。

+1

ラインを編集しました - ホルダー=(ホルダー)rowViewを。 getTag();ポップアップ エラー値は最終的な変数 "ホルダー"に割り当てられません – Murali

+0

ありがとうtahsinRupam、私はめまいになって、このコードを理解していません。 – Murali

+0

ここでイメージビューをクリックし、条件がOKならば2番目のイメージビューをクリックしたいと思います。イメージビュー2のイメージをイメージビュー1のイメージに置き換えます。 imageview1の画像をクリアすることができますplsヘルプ – Murali

1

ただ1つの要素がある場合、LinearLayoutは必要ありません。ちょうどImageViewが行います。リストビューを使用している場合、これはあなたの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

ok私はそれを得ました...... – Murali

+0

私はsquare.xmlにのみimageviewを入れようとすると、それは赤で表示されています – Murali

関連する問題