2013-11-25 2 views
5

У меня есть GridView с кнопкой 81 на нем. Я хочу добавить clicklistener в это gridview, но он недоступен. Я не могу понять, что добавляю OnItemClickListener, но он не работает. С кодом нет ошибки. Только у меня есть не работающий OnItemClickListener.Как добавить gridview setOnItemClickListener

Мои дочерние элементы сетки, на которых есть кнопка (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> 

My ImageAdapter class;

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 

public ImageAdapter(Context c) { 
    mContext = c; 
} 

public int getCount() { 
    return 81; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

@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); 

    return gridView; 
} 

} 

Реализация Gridview на activity_main.xml;

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

И, наконец, мой файл MainActivity.java;

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

андроида: фокусируемый = "ложный" андроида: focusableInTouchMode = "false" добавьте это на свою кнопку и попробуйте еще раз. –

+1

Вы можете установить 'OnClickListener' внутри вашего пользовательского адаптера на кнопку. –

+0

Возможный дубликат [Android - Gridview с пользовательским BaseAdapter, создайте onclicklistener] (http://stackoverflow.com/questions/20052631/android-gridview-with-custom-baseadapter-create-onclicklistener) – saiful103a

ответ

2

Вы запрашиваете щелчок на элементе (не на кнопке внутри элемента), поэтому необходимо изменить ваш ребенок компоновки 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> 

в

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

или вы можете добавить адаптер адаптера ClickListener

@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

Вы правы. Добавление класса OnClickListener в класс адаптера более полезно. –

+0

Неправильный ответ на этой странице, см. [Ниже ответ] (https://stackoverflow.com/a/20192172/3367974) вместо –

0

Я предлагаю вам добавить слушателя в метод getview вместо добавления в класс активности. попробовать этот код

@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.

Чтобы добавить слушателя к сетке добавить следующий код:

// 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; 

     } 
    } 
}); 

и так далее вы можете добавить все числа в случаях.

0

В вашем CustomAdapter в

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

}

0

Если вы хотите, чтобы получить текст, который щелкнул элемент, который вы можете использовать этот

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(); 

      } 
     }); 
Смежные вопросы