2015-11-20 3 views
0

У меня есть gridView с элементами изображения, но я не могу сделать его доступным для клика. Я вроде как новичок в андроиде, и я не понимаю, как сделать эти тезисы доступными для кликов. Я пробовал некоторые ответы, которые я читал в других сообщениях, но это не работает.Сделать imageView в gridView clickable

Справка ...

Другой вопрос! Если я хочу передать жестко закодированную строку в другое действие, но эта строка изменяется каждый раз, когда я нажимаю элемент imageView. Могу ли я объявить статическую строку, а затем я говорю string = "word", а затем вызывать ее из другого действия с Activity.string? Будет ли у меня ценность в другой деятельности?

Ниже приведены мои файлы xml, gridViewAdapter и активность!

services_list_activity.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="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".ServicesListActivity"> 


<GridView 
    android:id="@+id/gridView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_margin="4dp" 
    android:columnWidth="80dp" 
    android:gravity="center" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" /> 
</RelativeLayout> 

gris_row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:padding="5dp" > 

<ImageView 
    android:id="@+id/item_image" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_marginRight="10dp" 
    android:src="@drawable/atm"> 
</ImageView> 

<TextView 
    android:id="@+id/item_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:textSize="15sp" > 
</TextView> 
</LinearLayout> 

CustomGridViewAdapter.java

public class CustomGridViewAdapter extends ArrayAdapter<Item> { 
Context context; 
int layoutResourceId; 
ArrayList<Item> data = new ArrayList<Item>(); 

public CustomGridViewAdapter(Context context, int layoutResourceId, 
          ArrayList<Item> data) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    RecordHolder holder = null; 

    if (row == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new RecordHolder(); 
     holder.txtTitle = (TextView) row.findViewById(R.id.item_text); 
     holder.imageItem = (ImageView) row.findViewById(R.id.item_image); 
     row.setTag(holder); 
    } else { 
     holder = (RecordHolder) row.getTag(); 
    } 

    Item item = data.get(position); 
    holder.txtTitle.setText(item.getTitle()); 
    holder.imageItem.setImageBitmap(item.getImage()); 


    return row; 

    } 
    static class RecordHolder { 
    TextView txtTitle; 
    ImageView imageItem; 

    } 

     } 

ServicesListActivity.java

public class ServicesListActivity extends Activity implements AdapterView.OnItemClickListener{ 
protected static final Toast text = null; 

//String to pass to another activity 
public static String types; 

GridView gridView; 

ArrayList<Item> gridArray = new ArrayList<Item>(); 
CustomGridViewAdapter customGridAdapter; 

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

    //set grid view item 
    Bitmap atmIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.atm); 
    Bitmap bankIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.bank); 
    Bitmap barIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.bar); 
    Bitmap cafeIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.cafe); 

    gridArray.add(new Item(atmIcon,"ATMs")); 
    gridArray.add(new Item(bankIcon,"Banks")); 
    gridArray.add(new Item(barIcon,"Bars")); 
    gridArray.add(new Item(cafeIcon,"Cafés")); 

    gridView = (GridView) findViewById(R.id.gridView1); 
    customGridAdapter = new CustomGridViewAdapter(this, R.layout.grid_row, gridArray); 
    gridView.setAdapter(customGridAdapter); 


} 


@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    //intent 
    Intent data = new Intent(getApplicationContext(), ListActivity.class); 
     switch (position) { 
      case 0: 
       //String to send to another activity 
       types= "restaurant"; 
       startActivity(data); 
       break; 

      case 1: 

       startActivity(data); 
       break; 
      case 2: 

       startActivity(data); 
       break; 
      case 3: 

       startActivity(data); 
       break; 

      default: 
       break; 
     } 

} 

     } 
+0

holder.imageItem.setOnClickListener (новый View.OnClickListener() { @Override public void onClick (View v) { } }); –

ответ

1

Добавьте это в ImageView:

android:clickable="true" 

С обратной связью:

android:background="?attr/selectableItemBackground" 

Затем установить OnClickListener в вашей деятельности:

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

     } 
    }); 
+0

Вы имеете в виду вместо OnIemClickListener? – Lotus91

+0

Не вместо OnItemClickListener –

Смежные вопросы