【问题标题】:Android Listview, on click get name of item in listAndroid Listview,单击获取列表中项目的名称
【发布时间】:2016-07-25 08:35:56
【问题描述】:

我有一个包含电影的 listView。当用户点击一部电影时,我希望该导演的名字出现在 Toast 中。

Toast 正在工作。我只是不确定如何获得名称。

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

        ViewHolder holder = null;

        if(convertView == null){
            holder = new ViewHolder();
            convertView = inflater.inflate(resource, null);
            holder.ivMovieIcon = (ImageView)convertView.findViewById(R.id.ivIcon);
            holder.tvMovie = (TextView)convertView.findViewById(R.id.tvMovie);
            holder.tvTagline = (TextView)convertView.findViewById(R.id.tvTagline);
            holder.tvYear = (TextView)convertView.findViewById(R.id.tvYear);
            holder.tvDuration = (TextView)convertView.findViewById(R.id.tvDuration);
            holder.tvDirector = (TextView)convertView.findViewById(R.id.tvDirector);
            holder.rbMovieRating = (RatingBar)convertView.findViewById(R.id.rbMovie);
            holder.tvCast = (TextView)convertView.findViewById(R.id.tvCast);
            holder.tvStory = (TextView)convertView.findViewById(R.id.tvStory);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(final View v) {
                Toast.makeText(MainActivity.this, "Name of Director",
                        Toast.LENGTH_LONG).show();
            }
        });


        final ProgressBar progressBar = (ProgressBar) convertView.findViewById(R.id.progressBar);

        ImageLoader.getInstance().displayImage(movieModelList.get(position).getImage(), holder.ivMovieIcon, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                progressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                progressBar.setVisibility(View.GONE);
            }
        });

        holder.tvMovie.setText(movieModelList.get(position).getMovie());
        holder.tvTagline.setText(movieModelList.get(position).getTagline());
        holder.tvYear.setText("Year: " + movieModelList.get(position).getYear());
        holder.tvDuration.setText("Duration: " + movieModelList.get(position).getDuration());
        holder.tvDirector.setText("Director: " + movieModelList.get(position).getDirector());

        // rating bar
        holder.rbMovieRating.setRating(movieModelList.get(position).getRating()/2);

        StringBuffer stringBuffer = new StringBuffer();
        for(MovieModel.Cast cast : movieModelList.get(position).getCastList()){
            stringBuffer.append(cast.getName() + ", ");
        }

        holder.tvCast.setText("Cast:" + stringBuffer);
        holder.tvStory.setText(movieModelList.get(position).getStory());
        return convertView;
    }

    class ViewHolder{
        private ImageView ivMovieIcon;
        private TextView tvMovie;
        private TextView tvTagline;
        private TextView tvYear;
        private TextView tvDuration;
        private TextView tvDirector;
        private RatingBar rbMovieRating;
        private TextView tvCast;
        private TextView tvStory;
    }

提前致谢

【问题讨论】:

  • 为什么不使用OnItemClickListener
  • 只需致电movieModelList.get(position).getDirector()
  • 我还是安卓开发新手。没想到使用 OnItemClickListener
  • 嗨,我把它改成了movieModelList.get(position).getDirector()。我还必须更改 public View getView(final int position, View convertView, ViewGroup parent)。以避免错误。将 int 位置更改为 final。这是个好主意还是坏主意

标签: android listview android-studio


【解决方案1】:

这很简单.....

 convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(final View v) {
                Toast.makeText(MainActivity.this, movieModelList.get(position).getDirector(),
                        Toast.LENGTH_LONG).show();
            }
        });

【讨论】:

  • 您好,我将其更改为您的示例。我还必须更改 public View getView(final int position, View convertView, ViewGroup parent) 以避免错误。将 int 位置更改为 final。这是个好主意还是坏主意。
  • @Kong 这个逻辑很完美
  • @Kong 确定最终变量位置没有错
【解决方案2】:

我看不到您的初始 Listview 变量 也许这可以解决你的问题伙计 Listview with toast message on click

【讨论】:

    【解决方案3】:

    您可以立即查看您的 Toast

    convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(final View v) {
       Toast.makeText(Context, "Name of Director"+movieModelList.getMethod(),
                        Toast.LENGTH_LONG).show();
            }
        });
    

    编辑

      listViewObj.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // Toast
                    Toast.makeText(getApplicationContext(),
                    ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
                }
            });
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-04-05
      • 2013-07-04
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 2013-04-13
      相关资源
      最近更新 更多