Search code examples
javaandroidlistviewonitemclicklistener

Get name of the rowItem in listView onClick


I am trying to implement a simple listView with onClick functionality. On clicking the item in the listView, I want to show the name of the item in a 'toast message, but I am unable to do that. I have used the method suggested in this link and link but couldn't get the desired result. I have added my code below :

MainActivity

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rowItem = new AppList();
        final ListView userInstalledApps = (ListView)findViewById(R.id.appListView);

        List<AppList> installedApps = getInstalledApps();
        CustomAppAdapter installedAppAdapter = new CustomAppAdapter(MainActivity.this, installedApps);
        userInstalledApps.setAdapter(installedAppAdapter);

        userInstalledApps.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                TextView appName = (TextView)adapterView.findViewById(R.id.list_app_name);
                Toast.makeText(getApplicationContext(),
                        "Clicked "+ adapterView.getItemAtPosition(i),Toast.LENGTH_LONG).show();

            }
        });
    }

CustomAppAdapter.java

    public class CustomAppAdapter extends BaseAdapter {

    private LayoutInflater layoutInflater;
    private List<AppList> listStorage;
    Context context;

    public CustomAppAdapter(Context context, List<AppList> listStorage) {
        layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.listStorage = listStorage;
    }

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

    @Override
    public Object getItem(int position) {
        return position;
    }

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

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

        ViewHolder listViewHolder;
        if(convertView == null){
            listViewHolder = new ViewHolder();
            convertView = layoutInflater.inflate(R.layout.installed_app_list, parent, false);

            listViewHolder.textInListView = (TextView)convertView.findViewById(R.id.list_app_name);
            listViewHolder.imageInListView = (ImageView)convertView.findViewById(R.id.app_icon);
            convertView.setTag(listViewHolder);
        }else{
            listViewHolder = (ViewHolder)convertView.getTag();
        }
        listViewHolder.textInListView.setText(listStorage.get(position).getName());
        listViewHolder.imageInListView.setImageDrawable(listStorage.get(position).getIcon());

        return convertView;
    }

    static class ViewHolder{

        TextView textInListView;
        ImageView imageInListView;
    }
}

Below is the screenshot of the listView : ListView

On trying this method:

Toast.makeText(getApplicationContext(),
                    "Clicked "+ adapterView.getItemAtPosition(i),Toast.LENGTH_LONG).show();

Suppose I clicked on the 2nd item in the listView so I get a toast message as Clicked 2. But I want that it shows me Clicked PhonePe


Solution

  • protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            rowItem = new AppList();
            final ListView userInstalledApps = (ListView)findViewById(R.id.appListView);
    
            List<AppList> installedApps = getInstalledApps();
            CustomAppAdapter installedAppAdapter = new CustomAppAdapter(MainActivity.this, installedApps);
            userInstalledApps.setAdapter(installedAppAdapter);
    
            userInstalledApps.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    
                    TextView appName = (TextView)adapterView.findViewById(R.id.list_app_name);
                    Toast.makeText(getApplicationContext(),
                            "Clicked "+ installedApps.get(i).getName(),Toast.LENGTH_LONG).show();
    
                }
            });
        }
    

    Try this.