2015-05-18 2 views
0

У меня есть пользовательский GridView, заполненный массивом цветов. Теперь, когда я нажимаю элемент, я хочу получить цвет ячейки и передать его. У меня есть этот код, но когда я нажимаю на элемент, получить результат (ноль)Android getItem int GridView

public class Colori_picker extends Activity { 
    private GridView grColori; 
    private ColorPickerAdapter mAdapter; 
    @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.color_picker); 

     grColori = (GridView) findViewById(R.id.gridViewColors); 
     mAdapter = new ColorPickerAdapter(this); 
     grColori.setAdapter(mAdapter); 
     grColori.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       int prova = (int) grColori.getItemIdAtPosition(position); 
       System.out.println(prova);//here I get 0 

       Intent intent = new Intent(); 
       intent.putExtra("colore", prova); 
       setResult(RESULT_OK, intent); 

      finish(); 
     } 
    }); 
} 

адаптер

public class ColorPickerAdapter extends BaseAdapter { 
    private Context context; 

    private List<Integer> colorList = new ArrayList<Integer>(); 

    int colorGridColumnWidth; 
    public ColorPickerAdapter(Context context) { 
     this.context = context; 

     String colors[][] = { 
      { "83334C", "B65775", "E07798", "F7A7C0", "FBC8D9", "FCDEE8" }, 
      { "000000", "434343", "666666", "999999", "CCCCCC", "EFEFEF" } }; 

     colorList = new ArrayList<Integer>(); 

     // add the color array to the list 
     for (int i = 0; i < colors.length; i++) { 
      for (int j = 0; j < colors[i].length; j++) { 
      colorList.add(Color.parseColor("#" + colors[i][j])); 
      } 
     } 
    } 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 

     if (convertView == null) { 
      imageView = new ImageView(context); 


     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setBackgroundColor(colorList.get(position)); 
     imageView.setId(position); 

     return imageView; 
    } 
    public int getCount() { 
     return colorList.size(); 
    } 
    public Object getItem(int position) { 
     return null; 
    } 
    public long getItemId(int position) { 
     return 0; 
    } 
} 

ответ

0

Вместо того, чтобы получить его из GridView написать публичный метод в адаптере, который возвращает цвет из массива цветов. Что-то вроде этого должно сделать трюк.

В адаптере поместите этот метод.

public Integer getSelectedColor(int position) { 
    return colorList.get(position); 
} 

Затем замените

int prova = (int) grColori.getItemIdAtPosition(position); 

с

int prova = (int) mAdapter.getSelectedColor(position); 
+0

Да, что мне было нужно. спасибо – user2847219

+0

Спасибо, если это помогло не стесняться и проверять его как ответ. –

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