在 listView onClick 中获取 rowItem 的名称

Get name of the rowItem in listView onClick

我正在尝试实现具有 onClick 功能的简单 listView。单击 listView 中的项目时,我想在 'toast 消息中显示项目的名称,但我做不到。我已经使用了这个 link and link 中建议的方法,但无法得到想要的结果。我在下面添加了我的代码:

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

下面是listView的截图:

关于尝试此方法:

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

假设我单击了 listView 中的第二个项目,所以我收到 toast 消息 Clicked 2。但我希望它显示我 Clicked PhonePe

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

            }
        });
    }

试试这个。