简体   繁体   中英

Android list view item click in adapter

I have a Fragment class and corresponding adapter class. My Fragment class looks like this -

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        myAdapter = new MyAdapter(getActivity(), favourites);
        msgListView.setAdapter(myAdapter );
        return view;
    }

In MyAdapter,

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder1 viewHolder;
        MyClass favouriteMessage =  favouriteMessageList.get(position);

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.favorites_fragment_list, null);
            viewHolder = new ViewHolder1();
            viewHolder.favouriteMessagesList = (TextView)convertView.findViewById(R.id.favourites_list);
            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder1) convertView.getTag();
        }
        //Update Your Views Here
        viewHolder.favouriteMessagesList.setText(favouriteMessage.getText());

        return convertView;
    }

    public void setFavouritesData(ArrayList<FavouriteMessageWrapper> data) {
        favouriteMessageList = data;
        notifyDataSetChanged();
    }

I want to implement list view item on click listener. Where do I implement it? If i try to do it in onCreateView of my fragment, it is null.

Try like this,

set itemClickListener in fragment and do like this,

msgListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                @Override
                                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                    MyClass favouriteMessage = favourites.get(position);
                                   String favorite_message = favouriteMessage.STRING_NAME;
                                }
                            });

don't set adpter on create. setadapter after getting data.like http method set adapter in onpost method.

Make your fragment implement OnItemSelectedListener and after

msgListView.setAdapter(myAdapter ); in your onCreateView()

msgListView.setOnItemSelectedListener(this) .

Do all initialization in onCreateView() :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragementName, container, false);//put fragment name of your 
    msgListView=(ListView)view.findViewById(R.id.listView);
    return view;
}

Implement OnItemClickListener in your fragment and in onActivityCreated() setup adapter and itemClickListener :

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    myAdapter = new MyAdapter(getActivity(), favourites);
    msgListView.setAdapter(myAdapter );
    msgListView.setOnItemClickListener(this);
}

you can implement onClickListener inside the adapter instead

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

     viewHolder.favouriteMessagesList.setOnClickListener(new OnClickListener() {  
        public void onClick(View v)
            {
                //perform action
            }
         });

    return convertView;
}

hope it solved your problem

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM