2015-07-15 2 views
1

То, что я пробовал:По вопросу Нажмите Listener для List View простирающейся ArrayAdapter

public class EntryAdapter extends ArrayAdapter<Item> { 

private Context context; 
private ArrayList<Item> items; 
private LayoutInflater vi; 

public EntryAdapter(Context context,ArrayList<Item> items) { 
    super(context,0, items); 
    this.context = context; 
    this.items = items; 
    vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public View getView(int position, final View convertView, ViewGroup parent) { 

    // // // // NON-FUNCTIONING CODE BELOW 

    AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      Intent intent = new Intent(getContext(), NewsItemActivity.class); 
      convertView.getContext().startActivity(intent); 

     } 
    }; 
} 

AdapterView.onItemClickListener оленья кожа давать какие-либо ошибки, но не кажется, что работать вообще.

Каков правильный способ установки этого приемника на экране?

Примечание: Я должен установить его в этом классе адаптера, а не в основном классе по моим собственным причинам.

+0

Установите onClickListener вместо convertView вместо – Chol

+0

Можете ли вы развернуть пожалуйста. 'convertView.setOnItemClickListener'? –

+0

'convertView.setOnClickListener' не дает никаких ошибок, кроме как я не могу запустить строку' startActivity (intent) '. Есть идеи? –

ответ

2

Вы shuldn't реализовать слушатель внутри getView(), если только вы не установили прослушиватель в определенном представлении внутри макета строки.

Вы должны использовать вместо setOnItemClickListener() метода на вашем ListView:

ListView lv = (ListView) findViewById(R.id.your_listview); 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Intent intent = new Intent(context, NewsItemActivity.class); 
     context.startActivity(intent); 
    } 
}); 

EDIT:

Если для каждого действия внутри OnClick, вам нужна информация, которая находится в ваших объектах (пункт), то вы можете получить его таким образом:

Item item = (Item)listview.getAdapter().getItem(position); 

изнутри onItemClick() метод

+0

У меня есть методы, запущенные внутри моего класса адаптера, который возвращает значения, которые мне нужно передать через намерение. Следовательно, onClickListener в классе адаптера –

+0

Посмотрите на мое редактирование. @GregoryPeck – GVillani82

+0

Вы также можете получить выбранный контент в самом OnItemClickListener, используя adapterView.getItemAtPosition (position). – Vishwa

0

Вы можете использовать:

convertView.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //Make what you want 
     } 
    }); 

Или в зависимости от вашей точки зрения пункта, вы можете сделать OnCLickListener на вашем обрамление элемента или макете конкретного элемента

+0

Невозможно разрешить startActivity. Кроме этого, кажется, что нет проблем –

+0

Попробуйте использовать контекст.startActivity() – Chol

+0

Он избавляется от сообщения об ошибке, но при сбое приложения при запуске теперь –

0

Try этим кодом: -

Spinner cb_tv; 
ArrayList<String> list = new ArrayList<String>(); 
ArrayAdapter<String> dataAdapter; 
list.add(phone1); 
list.add(name1); 
dataAdapter = new ArrayAdapter<String>(Display_Tank.this,android.R.layout.simple_spinner_item, list); 
cb_tv.setAdapter(dataAdapter); 

cb_tv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(),"Clicked",Toast.LENGTH_SHORT).show(); 
     } 
    }); 

на месте cb_tv Spinner Вы можете использовать ListView

0

Вы можете попробовать этот путь ... он работает в моем случае Измени context в
Activity activity = (Activity) context;

 convertView.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(activity, NewsItemActivity.class); 
      activity.startActivity(intent); 

     } 
    }); 
+0

должно было объявить окончательное ... все еще приложение сработает при запуске, хотя –

+0

вы можете напрямую изменить его из своего конструктора в место контекста, которое оно меняет на переменную активности/экземпляр и выводит это. – MPG

+0

частный контекст контекста; заменяется частным контекстом активности; и this.context = context; заменяется контекстом this.context = (Activity); – MPG

0

Прежде всего, лучший способ для достижения этой цели является использовать свои собственные ViewHolders в ListView.

Это пример обычая ViewHolder

class MyViewHolder extends ViewHolder implements View.OnItemClickListener { 
    public MyViewHolder(View view) { 
     /* Implement your views here 
     * like this: mTextView = (TextView) view.findViewById(R.id.myId); 
     */ 
     view.setOnItemClickListener(this); 
    } 

    @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getContext(), NewsItemActivity.class); 
      convertView.getContext().startActivity(intent); 
     } 
    } 

И на вашем методе GetView вы создаете этот ViewHolder и заполнить ваши взгляды с вашими данными.