2012-03-19 2 views
0

В следующем коде я хочу установить Onclick Listeners на некоторые «элементы» моей строки. где я должен поместить код прослушивания setOnclick? В коде действия или в адаптере? Я предполагаю, что первый, но в этом случае, как я буду определять, какая строка была выбрана? (каждая строка должна доводить меня до разных точек зрения)?переход на другой экран из строки списка.

Java код:

List<String[]> info=new ArrayList<String[]>(); 
     String[] names_info=new String[5]; 
     String[] phones_info=new String[5]; 
     String[] map_info=new String[5]; 
     String[] web_info=new String[5]; 
     String[] photos_info=new String[5]; 
for(int i=0;i<names_info.length;i++) 
    { 
     info.add(new String[]{names_info[i],phones_info[i],map_info[i],web_info[i],photos_info[i]}); 
    } 
    for (int i = 0; i < info.size(); i++) { 
     Log.d("TAG", "item " + i + 
       " name:" + info.get(i)[0] + 
       " info:" + info.get(i)[1]); 
    } 
    FacilitiesAdapter adapter = new FacilitiesAdapter(this,info,want_info_display,want_phone_display,want_photos_display); 
    //System.out.println(info[0]); 
    setListAdapter(adapter); 

EDIT 

ListView lv = getListView(); 



lv.setTextFilterEnabled(true); 

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // When clicked, show a toast with the TextView text 
      //Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(), 
      //Toast.LENGTH_SHORT).show(); 
Intent i33 = new Intent(HotelsScreen.this,AbousUsScreen.class); 
      i33.putExtra("position", arg2); 
      System.out.println(arg2); 
      System.out.println(info.get(arg2)[0]); 

     startActivity(i33);    
     } 
    }); 

Я вижу результаты в журнале, так что это означает, что моя информация получает свой результат в обычном режиме.

Это мой адаптер.

public class FacilitiesAdapter extends ArrayAdapter<String[]> { 
    private final Context context; 
    List <String[]> dataList; 

    public FacilitiesAdapter(Context context, List<String[]> dataList, int need_phone, int need_info, int need_photos) { 
     super(context, R.layout.expand_row); 
     this.context = context; 
     this.dataList = dataList; 
     //this.tracks_condition=tracks_condition; 
     //this.count=count; 
    } 
    public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View rowView = inflater.inflate(R.layout.expand_row, parent, false); 
      System.out.println("I am here"); 
      String[] data = dataList.get(position); 
      String name=data[0]; 
      TextView textView = (TextView) rowView.findViewById(R.id.name); 
      System.out.println("I am in the adapter "+name); 
      textView.setText(name); 
      return rowView; 
    } 
} 

EDIT 1: я должен сейчас, чтобы увидеть в каждом пункте я нажимаю свою позицию и свое имя? Потому что я ничего не вижу?

ответ

1

может быть столь же просто, как только что-то эти строки:

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
     long arg3) 
    { 
    Intent i33 = new Intent(MyScreen.this,OtherScreen.class); 
    i33.putExtra("position", position); 
    startActivity(i33); 
    } 
}); 
+0

Это могло бы пойти, вероятно, пойти в вашу onCreate – dldnh

+0

Хорошо с этим. И как я могу передать в качестве параметра идентификаторы текста (как имя, так и информацию, я приказываю использовать их для того, чтобы узнать whick screen, чтобы открыть –

+1

, если 'onItemClick' имеет доступ к тому же' dataList', который имеет адаптер, он может получить нужные ему данные, а затем использовать 'i33.putExtra (...)' похожее на то, что показано выше – dldnh

0

Я думаю, что самая большая проблема будет выяснить, как отобразить строку в соответствующий экране. Если вы можете это сделать, вы можете настроить объект Map со всеми сопоставлениями.

В вашем адаптере вы можете использовать setTag() на представлении и передать ему то, что вы вернетесь с карты, а затем создать из него новый Намерение.

//In your adapter's getView() method... 
Class activityClass = rowToActivityMap.get(someRowAttribute); 
view.setTag(activityClass); 

//In your click listener... 
Class activityClass = (Class)view.getTag(); 
Intent intent = new Intent(this, activityClass); 
startActivity(intent); 
Смежные вопросы