开发者

setOnItemClickListener not responding for Custom ListView

I wrote a custom Adapter for a listview ,but when i tried implement click event for list item ,i found that it was not responding ,I will be glad if someone suggest me a solution.

public class TourList extends ListActivity {
....
setContentView(R.layout.tourlist);
.....





getListView().setOnItemClickListen开发者_JS百科er(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                     //i couldn't reach here
             Log.v(TAG,"did u get me");
        }
      }); 
adap = new MyAdapter(TourList.this,mylist);
getListView().setAdapter(adap);

and my custom adapter is

private class MyAdapter extends BaseAdapter {

            ArrayList<HashMap<String,String>> elements;
            Context ctx;

            public MyAdapter(Context context, ArrayList<HashMap<String,String>> mylist) {
                  this.elements=mylist;
                  this.ctx=context;
             }

            public boolean isEnabled(int position){
               return true;
                      }

            @Override
            public int getCount() {
                return elements.size();
                }
            @Override
            public Object getItem(int position) {
                return elements.get(position);
                }
            @Override
            public long getItemId(int position) {
                return position;
                }
                @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                if (convertView == null) {
                      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                      v = vi.inflate(R.layout.rowfor_tourlist, null);
                 } 

                    TextView in = (TextView)v.findViewById(R.id.intro);
                    TextView du = (TextView)v.findViewById(R.id.duration);
                    TextView pf = (TextView)v.findViewById(R.id.price);
                    TextView pn = (TextView)v.findViewById(R.id.product);
                    WebView wv=(WebView)v.findViewById(R.id.photo);  
                    in.setText(Html.fromHtml(mylist.get(position).get("Intro")));
                    du.setText(mylist.get(position).get("Duration"));
                    pf.setText(mylist.get(position).get("Price"));
                    pn.setText(mylist.get(position).get("Product"));
                    wv.getSettings().setJavaScriptEnabled(true);
                    wv.loadUrl(mylist.get(position).get("ImageURL"));

                return v;
            }           
        }//class

and my tourlist.xml file looks like

 <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
            ....
        >

 <ListView android:id="@id/android:list"
           android:layout_width="fill_parent" 
           android:layout_height="fill_parent"
           android:background="@drawable/white"
            android:cacheColorHint="#00000000"
           android:layout_weight="1"

           />
</...>


The question is really simple.

You cannot call setOnItemClickListener before setAdapter call because ListView relies on its children and its children are unknown until you set the adapter.

So simply do like this:

public class StatusListView extends ListView implements OnItemClickListener {

    private StatusListAdapter adapter;

    public StatusListView(Context context) {
        super(context);
        init();
    }

    private void init() {
        // do other things
            ...

        adapter = new StatusListAdapter(getContext(), R.layout.status_list_item, statuses);
        // pay attention here
        setAdapter(adapter);
        setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        StatusListAdapter adapter = (StatusListAdapter) ((ListView) adapterView).getAdapter();
        Status status = (Status) adapter.getItem(position);
        Intent intent = new Intent(getContext(), CustomActivity.class);
        intent.putExtra(C.extra_keys.status, status);
        getContext().startActivity(intent);
     }

}  

In this way you will have your event up and running ! Sorry but I didn't time to go in detail in Android source code, if I will I will post again.

Bye guys, Alex

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜