setOnItemClickListener не отвечает для Custom ListView - PullRequest
8 голосов
/ 29 апреля 2010

Я написал специальный адаптер для просмотра списка, но когда я попытался реализовать событие щелчка для элемента списка, я обнаружил, что он не отвечает, я буду рад, если кто-нибудь предложит мне решение.* и мой пользовательский адаптер

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

, а мой файл tourlist.xml выглядит как

 <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"

           />
</...>

Ответы [ 2 ]

3 голосов
/ 29 апреля 2010

Посмотрите, поможет ли это обсуждение ...

1 голос
/ 08 мая 2012

Вопрос действительно прост.

Вы не можете вызвать setOnItemClickListener до setAdapter , так как ListView полагается на свои дочерние элементы, а его дочерние элементы неизвестны, пока вы не установите адаптер.

Так что просто сделай так:

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);
     }

}  

Таким образом, ваше мероприятие будет запущено и запущено! Извините, но я не успел подробно остановиться на исходном коде Android, если позволю, я опубликую его снова.

Пока, ребята, Alex

...