2013-11-25 27 views
5

Üzerinde 81 tuşu bulunan bir GridView var. Bu ızgara görünümüne tıklama listesi eklemek istiyorum ancak mevcut değil. OnItemClickListener'ı eklediğimi anlayamıyorum ama çalışmıyor. Kodda bir hata yok. Sadece sahip olduğum bir OnItemClickListener çalışmıyor.Gridview setOnItemClickListener nasıl eklenir

Üzerine düğme içeren gridview çocuklarım (gridview_members.xml);

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<Button 
    android:id="@+id/city" 
    android:layout_width="183dp" 
    android:layout_height="90dp" 
    android:textSize="19sp" 
    android:textStyle="bold" 
    android:text="Code\n\nCity" 
    android:gravity="center" 
    android:background="@drawable/city_btn_tablet" /> 

</RelativeLayout> 

Benim ImageAdapter sınıfım;

Activity_main.xml dosyasında Gridview uygulaması;

<GridView 
android:id="@+id/gridview" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:horizontalSpacing="5dp" 
android:verticalSpacing="5dp" 
android:gravity="center" 
android:stretchMode="columnWidth" 
android:numColumns="6" > 
</GridView> 

Son olarak MainActivity.java dosyam;

public class MainActivity extends Activity{ 

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

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

    gridview.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
} 
+0

android kullanabilirsiniz öğeyi tıklandığında metni almak istiyorsanız içine CustomAdapter olarak –

+1

Özel bağdaştırıcınızın içinde 'OnClickListener' ayarını yapabilirsiniz. –

+0

Olası bir kopyası, [Android - Gridview ile Özel BaseAdapter oluşturun, onclicklistener oluşturun] (http://stackoverflow.com/questions/20052631/android-gridview-with-custom-baseadapter-create-onclicklistener) – saiful103a

cevap

2

Sen (değil öğenin iç düğmesi) öğe üzerinde tıklama talep eden yüzden

<?xml version="1.0" encoding="utf-8"?> 
<Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/city" 
    android:layout_width="183dp" 
    android:layout_height="90dp" 
    android:textSize="19sp" 
    android:clickable="true" 
    android:textStyle="bold" 
    android:text="Code\n\nCity" 
    android:gravity="center" 
    android:background="@drawable/city_btn_tablet" /> 
için

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<Button 
    android:id="@+id/city" 
    android:layout_width="183dp" 
    android:layout_height="90dp" 
    android:textSize="19sp" 
    android:textStyle="bold" 
    android:text="Code\n\nCity" 
    android:gravity="center" 
    android:background="@drawable/city_btn_tablet" /> 

</RelativeLayout> 

itibaren çocuğunuz XML düzenini

değiştirmek gerekiyorsa

veya

adaptörüne ClickListener ekleyebilirsiniz
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View gridView; 

    gridView =new View(mContext); 

    gridView = inflater.inflate(R.layout.gridview_members, null); 

    Button city = (Button) gridView.findViewById(R.id.city); 

       city.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

    //Toast here 

     }}); 

    return gridView; 
} 
+0

Haklısınız. Adaptör sınıfına OnClickListener eklenmesi daha kullanışlıdır. –

+0

Bu sayfadaki doğru cevap değil, bunun yerine [aşağıdaki cevaplara bakınız] (https://stackoverflow.com/a/20192172/3367974) –

0

Etkinlik sınıfına eklemek yerine getview yönteminde tıklama dinleyicisi eklemenizi öneriyorum. Bu kodu

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

View gridView; 

gridView =new View(mContext); 

gridView = inflater.inflate(R.layout.gridview_members, null); 

Button city = (Button) gridView.findViewById(R.id.city); 

city.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
      //Do your task here 
     } 
    }); 
    return gridView; 
} 
6

GridView GridView içerisinde bulunan düğmeye koymak gerek tıklanabilir deneyin.

ızgaraya dinleyici aşağıdaki kodu ekleyin eklemek için:

// Implement On Item click listener 
gridView1.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     switch (position) { 
      case 0: 
       break; 
      case 1: 
       break; 

     } 
    } 
}); 

Ve böylece durumlarda tüm numaraları ekleyebilir üzerinde. Odaklanabilir = "false" android: focusableInTouchMode

onBindViewHolder(... 
{ 
    yourViewHolder.gridview.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     //Do Something 
     } 
    }); 

}

0

= "false" bunu Button'ınıza ekleyin ve bir kez daha deneyin ..
0

Bunu

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       String item = ((TextView)view.findViewById(R.id.ID_OF_TEXTVIEW)).getText().toString(); 
       Toast.makeText(showMissions.this, "" + item, Toast.LENGTH_SHORT).show(); 

      } 
     });