2013-04-26 4 views
0

Я пытаюсь установить в ListView простой onItemClickListener заселена через ArrayAdapterСлушатель не похоже на работу в ListView

package it.polito.mad.task2; 

import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.ListFragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 

public class listFragment extends ListFragment { 

public View onCreateView(LayoutInflater li, ViewGroup vg, Bundle b){ 

     View v = li.inflate(R.layout.fraglist , vg, false); //inflate populates a view with desired content 

     //use an adapter to load the imageviews in the fragment 
     ListView listView = (ListView)v.findViewById(R.id.listViewListFrag); //get the resource id for the view to fill with data from adapter 

     ArrayList<opera> pics = JsonLoad("list.json"); 
     operaAdapter adapter = new operaAdapter(this.getActivity(), R.layout.opera, R.id.element, pics);//create the adapter passing the parameter needed to load content to elements in the opera layout 
     listView.setAdapter(adapter); //set the adapter for the view in the fragment 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
        long arg3) { 
       AppObj app = (AppObj) getActivity().getApplication(); 
      Intent goToDet = new Intent(getActivity(),ActivityDetails.class); 

      app.setItem(position); 

      startActivity(goToDet); 

      } 
     }); 


     return v; 
    } 
//more methods 
} 

и это адаптер класса

package it.polito.mad.task2; 

import java.io.IOException; 
import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class operaAdapter extends ArrayAdapter<opera> { 
    private Activity act; 
    ArrayList<opera> list; 
    private static LayoutInflater inflater=null; 

    public operaAdapter(Activity a, int layout, int element, ArrayList<opera> res){//save in local variables content of parameters 

     super(a, layout, res); 
     act = a; 
     list = res; 

    } 
    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public opera getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     TextView holder; 

     if(convertView==null){ 
      inflater = (LayoutInflater)act.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.opera, null); 

      holder = (TextView) convertView.findViewById(R.id.element); 
      convertView.setTag(holder); 
     } 
     else{ 
      holder = (TextView) convertView.getTag(); 
     } 

     holder.setText(list.get(position).getTitle()); 

     Drawable d; 
     try { 
      d = Drawable.createFromStream(act.getAssets().open(list.get(position).getImage()), null); 
      d.setBounds(0, 0, 200, 200); //set size of the drawable on the left of the text 
      holder.setCompoundDrawables(d, null, null, null); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return convertView; 
    } 

} 

Я попробовал несколько вещей, но слушатель, похоже, не получил никакого события, я ничего не пропустил?

+0

Если вы проверяете, получаете ли вы внутри вашего слушателя с точки останова или что-то, то я хотел бы проверить, чтобы убедиться, что вы адаптер не возвращается, как по какой-то причине - нулевое значение. –

ответ

1

Вы устанавливаете OnItemClickListener, но вы ничего не делаете на обратном вызове onItemClick. Попробуйте что-то вроде этого, чтобы показать, что щелчки видятся:

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

      // When clicked, show a toast with the TextView text 
      Toast.makeText(getApplicationContext(), "Position " + position 
        + " clicked", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
+0

Извините, я забыл упомянуть, что я начал работу там, я добавлю его в код – hate

+0

@ user1007179, вы попробовали добавить «Журнал» или «Тост» (мой пример), чтобы убедиться, что 'onItemClick' является называется? –

+0

Да, это не работает. Похоже, что что-то мешает событию перехватить – hate

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