2013-12-04 3 views
0

Я пытаюсь передать значение, выбранное в listview, но переданное значение не совпадает с выбранным. Что не так? Это мой полный код. Я получаю значение, отличное от выбранного.Android OnItemClickListener значение pass

ListAdapter adapter = new ArrayAdapter<Dettaglio>(this, R.layout.detlezione, R.id.tv_nomria, dettagli){ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = super.getView(position, convertView, parent); 
     final TextView tvId; 
     final TextView tvCaa; 
     ImageView tvC; 
     tvC = (ImageView) row.findViewById(R.id.color_view); 
     tvId = (TextView) row.findViewById(R.id.lbl); 
     tvCaa = (TextView) row.findViewById(R.id.tv_nome_caa); 
     tvCaa.setTypeface(tf); 
     Dettaglio d = dettagli.get(position); 
     tvId.setText(d.id+""); 
     tvCaa.setText(d.caa+""); 
     tvCaa.setTextColor(d.color); 
     tvC.setBackgroundColor(d.color); 
     lista.setOnItemClickListener(new OnItemClickListener(){ 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
       Intent invia_a_movimenti = new Intent(Sce.this, Movi.class); 
       Bundle extras = new Bundle(); 
       extras.putString("caa", tvCaa.getText().toString()); 
       extras.putInt("co", tvCaa.getCurrentTextColor()); 
       invia_a_movimenti.putExtras(extras); 
       startActivity(invia_a_movimenti); 
      } 
     }); 
     return row; 
    }; 
}; 
lista.setAdapter(adapter); 

----------- UPDATE ------- нормально, но мой onResume() не возвращает результат, то почему?

@Override 
protected void onResume(){ 

    Bundle extras = getIntent().getExtras(); 

    c_scelta.setText(i.getStringExtra("caa")); 
    int color; 
    color = (i.getIntExtra("co", 0)); 
    c_scelta.setTextColor(colore_ricevuto); 

    super.onResume(); 

} 
+0

, что вы имеете в виду с ТВЦ ?? –

+0

Можете ли вы поместить полный метод, пожалуйста? – guness

+0

Я включил полный код – user2976522

ответ

0

Я не уверен (так как код не достаточно ясно), но вы должны быть в состоянии сделать это:

extras.putString("caa", ((TextView)view).getText().toString()); 
extras.putInt("co", ((TextView)view).getCurrentTextColor()); 

Выбранный элемент передается через метод подписи OnItemClickListener. Таким образом, нажатый элемент является переменной view. Используйте view, чтобы получить информацию о клике. Кроме того, вы можете использовать переменные position или id.

EDIT:

Вы не должны назначать onItemClickListener за каждый из ряда. Вместо этого вы назначаете его один раз, поэтому ставьте это назначение из метода getView. Код ниже должен работать:

ListAdapter adapter = new ArrayAdapter<Dettaglio>(this, R.layout.detlezione, R.id.tv_nomria, dettagli) { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = super.getView(position, convertView, parent); 
     TextView tvId = (TextView) row.findViewById(R.id.lbl); 
     TextView tvCaa = (TextView) row.findViewById(R.id.tv_nome_caa); 
     ImageView tvC = (ImageView) row.findViewById(R.id.color_view); 
     tvCaa.setTypeface(tf); 
     Dettaglio d = dettagli.get(position); 
     tvId.setText(d.id + ""); 
     tvCaa.setText(d.caa + ""); 
     tvCaa.setTextColor(d.color); 
     tvC.setBackgroundColor(d.color); 
     return row; 
    }; 
}; 
lista.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Intent invia_a_movimenti = new Intent(Sce.this, Movi.class); 
     Bundle extras = new Bundle(); 
     TextView tvCaa = (TextView) view.findViewById(R.id.tv_nome_caa); 
     extras.putString("caa", tvCaa.getText().toString()); 
     extras.putInt("co", tvCaa.getCurrentTextColor()); 
     invia_a_movimenti.putExtras(extras); 
     startActivity(invia_a_movimenti); 
    } 
}); 
lista.setAdapter(adapter); 

Тем не менее я предлагаю вам использовать ViewHolder. Google это и хорошо учиться.

0

Я думаю, чтобы получить вашу идею. Вы пытаетесь получить доступ к выбранному текстовому полю в Listview и получить его атрибуты, а затем по методу onSelecteditem при обратном вызове, он даст вам некоторые параметры, такие как выбранное представление в списке, которое содержит текстовое представление и позицию выбранного представления и его идентификатор, что что вам сейчас нужно, чтобы получить TextView в выбранном элементе, так что вам нужно

TextView selectedTextView = (TextView)view.findViewById(R.id.textviewId); 
extras.putString("caa",selectdTextView.getText().toString()); 

и теперь вы можете получить доступ к любым данным из вашего TextView

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