2014-05-26 21 views
5

tôi tạo thành công một GridView tùy chỉnh (với hình ảnh và văn bản). Bây giờ tôi muốn viết một phương thức OnItemClickListener.I có thể lấy vị trí trên phương thức OnItemClickListener, nhưng tôi muốn có thể nhấp vào "Bạn bè" và xem "Mục được nhấp: Bạn bè"OnItemClickListener GridView Android

Làm thế nào tôi có thể chọn chuỗi thay vì vị trí? Đây là mã nguồn của tôi

public class Item { 
Bitmap image; 
String title; 

public Item(Bitmap image, String title) { 
    super(); 
    this.image = image; 
    this.title = title; 
} 
public Bitmap getImage() { 
    return image; 
} 
public void setImage(Bitmap image) { 
    this.image = image; 
} 
public String getTitle() { 
    return title; 
} 
public void setTitle(String title) { 
    this.title = title; 
} 



public class CustomGridViewAdapter extends ArrayAdapter<Item> { 
Context context; 
int layoutResourceId; 
ArrayList<Item> data = new ArrayList<Item>(); 
public static Item 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= data.get(position); 
    holder.txtTitle.setText(item.getTitle()); 
    holder.imageItem.setImageBitmap(item.getImage()); 
    return row; 

} 

public static class RecordHolder { 
    public static TextView txtTitle; 
    ImageView imageItem; 

} 

}

public class MainActivity extends Activity { 
GridView gridView; 
ArrayList<Item> gridArray = new ArrayList<Item>(); 
CustomGridViewAdapter customGridAdapter; 

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

    // set grid view item 
    Bitmap homeIcon = BitmapFactory.decodeResource(this.getResources(), 
      R.drawable.home); 
    Bitmap userIcon = BitmapFactory.decodeResource(this.getResources(), 
      R.drawable.personal); 

    gridArray.add(new Item(homeIcon, "Home")); 
    gridArray.add(new Item(userIcon, "User")); 
    gridArray.add(new Item(homeIcon, "House")); 
    gridArray.add(new Item(userIcon, "Friend")); 
    gridArray.add(new Item(homeIcon, "Home")); 
    gridArray.add(new Item(userIcon, "Personal")); 
    gridArray.add(new Item(homeIcon, "Home")); 
    gridArray.add(new Item(userIcon, "User")); 
    gridArray.add(new Item(homeIcon, "Building")); 
    gridArray.add(new Item(userIcon, "User")); 
    gridArray.add(new Item(homeIcon, "Home")); 
    gridArray.add(new Item(userIcon, "xyz")); 

    gridView = (GridView) findViewById(R.id.gridView1); 
    customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid, 
      gridArray); 
    gridView.setAdapter(customGridAdapter); 
    gridView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      Toast.makeText(getApplicationContext(), 
        "Item Clicked: " + position, Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 

}

Trả lời

3

Thay đổi này

Toast.makeText(getApplicationContext(), 
        "Item Clicked: " + position, Toast.LENGTH_SHORT).show(); 

để

Toast.makeText(getApplicationContext(), 
         "Item Clicked: " + ((TextView) v.findViewById(R.id.item_text)).getText(), Toast.LENGTH_SHORT).show(); 
+0

cảm ơn nhưng đó là câu trả lời không hiệu quả. Tôi đã thay đổi mã này, nhưng tôi không thể hiển thị ví dụ nhà nếu tôi nhấp vào nhà: ( – user3619713

+0

tôi cũng bị xóa trong đối tượng mục nhưng khi tôi nhấp vào mục trong GridView tôi có thể hiển thị tên gói và như văn bản này @ 556622123 – user3619713

+0

Sau khi chỉnh sửa những gì dẫn bạn có? –

1

Tôi biết câu trả lời này đang đến trong muộn một chút nhưng tôi chỉ chạy vào cùng một vấn đề và tôi giải quyết nó bằng cách sử dụng các thẻ vào các mục nhấp được sử dụng setTag()getTag(). Tôi chỉ muốn đăng phương pháp này trong trường hợp nó sẽ giúp người khác trong tương lai. Để sử dụng phương thức này chế độ xem "kiểu cầm giữ" (như bạn đang sử dụng ở trên), bạn chỉ cần đặt thẻ trên một mục khác bên trong đối tượng đang "giữ" dữ liệu của bạn.

Ví dụ:

Bạn đã có một đối tượng nào RecordHolder với một công TextView để bạn có thể thiết lập các thẻ trên này TextView như vậy:

holder.txtTitle.setTag("whatever you want")

Sau đó, bên trong phương pháp của bạn OnItemClickListener.onItemClick bạn có thể nhận thẻ như vậy:

String tagValue = ((CustomGridViewAdapter.RecordHolder) view.getTag()).txtTitle.getTag().toString();

tagValue sẽ whatever you want (do đó bạn có thể gán tên của các quan điểm nếu bạn muốn). Phương pháp này hoạt động tốt nếu bạn muốn lưu trữ dữ liệu khác (như id hoặc tham chiếu) và không chỉ lấy văn bản của TextView hoặc một cái gì đó như thế này. Nếu bạn chỉ muốn cùng một văn bản trong TextView thì câu trả lời của @ Giru phù hợp hơn.

Các vấn đề liên quan