2017-03-28 4 views
0

이미지와 텍스트가있는 사용자 정의 listview가 있습니다. 글라이드 라이브러리를 사용하여 Listview에 이미지를로드하고 있습니다. 때로는 이미지가 없으면 텍스트 만 표시됩니다. 이제 공유 의도를 사용하여 이미지 뷰와 텍스트를 공유하고 싶습니다.이 목적으로 버튼을 만들었습니다. 단추에 대한 Onclick Listener를 만들었으며 Listview의 각 항목과 함께 표시됩니다. 버튼을 클릭하면 프로세스에 이미지 뷰를 보내고 비트 맵으로 변환 한 다음 공유합니다. 여기에서 문제는 버튼을 클릭 할 때 특정 위치의 이미지 뷰가 선택된 다른 이미지 뷰 대신 선택된 상태입니다. 도와주세요.Listview에서 버튼을 클릭 한 위치에서 올바른 이미지 뷰를 얻는 방법

ImageView에 OnItem 리스너를 사용하여 전체 화면으로 표시하고 확대/축소 할 수 있습니다.

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

     final descusers du = dusers.get(position); 
     String username = du.loginname; 
     String descCrip=du.descCrip; 
     Limage = du.image; 
     long Ptime = du.Ptime; 
     profile = du.profile; 


     if(convertView==null) { 
      viewholder = new Viewholder(); 
      convertView = LayoutInflater.from(ds).inflate(R.layout.customlist, null); 
      viewholder.uname = (TextView) convertView.findViewById(R.id.username); 
      viewholder.desc = (TextView) convertView.findViewById(R.id.description); 
      viewholder.time = (TextView)convertView.findViewById(R.id.time); 
      viewholder.iview = (ImageView) convertView.findViewById(R.id.imageList); 
      viewholder.civ = (CircleImageView)convertView.findViewById(R.id.profile_image); 
      viewholder.share = (TextView)convertView.findViewById(R.id.share); 

      Glide.with(convertView.getContext()).load(du.profile).placeholder(R.drawable.place).dontAnimate() 
        .centerCrop().signature(new StringSignature(String.valueOf(System.currentTimeMillis()))) 
        .into(viewholder.civ); 

      convertView.setTag(viewholder); 
     }else { 

      viewholder = (Viewholder) convertView.getTag(); 

     } 

     viewholder.uname.setText(username); 
     viewholder.desc.setText(descCrip); 

     if (!Patterns.WEB_URL.matcher(Limage).matches()) { 
      // viewholder.progress.setVisibility(View.GONE); 
      viewholder.iview.setVisibility(View.GONE); 
     } else { 

      Glide.with(convertView.getContext()).load(Limage).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into(viewholder.iview); 
      viewholder.iview.setVisibility(View.VISIBLE); 
     } 


     final View finalConvertView = convertView; 
     viewholder.iview.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Dialog builder = new Dialog(listdisplay, android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
       builder.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       builder.getWindow().setBackgroundDrawable(
         new ColorDrawable(Color.BLACK)); 
       builder.setContentView(R.layout.imager); 

       ImageView image = (ImageView) builder.findViewById(R.id.image); 

       Glide.with(finalConvertView.getContext()).load(du.image) 
         .diskCacheStrategy(DiskCacheStrategy.ALL).into(image); 

       builder.show(); 
      } 
     }); 

     viewholder.share.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       //onShareItem(v); 
       Uri bmpUri = getLocalBitmapUri(viewholder.iview); 
       if (bmpUri != null) { 
        // Construct a ShareIntent with link to image 
        Intent shareIntent = new Intent(); 
        shareIntent.setAction(Intent.ACTION_SEND); 
        shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri); 
        shareIntent.setType("image/*"); 
        // Launch sharing dialog for image 
        listdisplay.startActivity(Intent.createChooser(shareIntent, "Share Image")); 

       } else { 
        // ...sharing failed, handle error 
       } 
      } 
     }); 


     return convertView; 
    } 

버튼을 클릭 한 위치에서 올바른 이미지 뷰를 얻는 방법.

+0

어댑터 외부에서 onclick 수신기를 전달할 수 있습니다. [내가 전에 게시 한 답변보기] http://stackoverflow.com/questions/38710179/how-to-implement-onclick-method-on-imageview/38710636#38710636 – kggoh

+0

어댑터 생성자를 보여주세요. –

+0

@RahulChaudhary - DescAdapter (listdisplay ds, ArrayList dusers, 활동 목록 표시) { this.ds = ds; this.dusers = dusers; this.listdisplay = listdisplay; } – user2269164

답변

1

사용이 코드 @Override 공공 무효 온 클릭 (보기 V) {

Dialog builder = new Dialog(listdisplay, android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
    builder.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    builder.getWindow().setBackgroundDrawable(
      new ColorDrawable(Color.BLACK)); 
    builder.setContentView(R.layout.imager); 

    ImageView image = (ImageView) builder.findViewById(R.id.image); 

    Glide.with(finalConvertView.getContext()).load(du.image) 
      .diskCacheStrategy(DiskCacheStrategy.ALL).into(image); 

    Glide 
      .with(finalConvertView.getContext()) 
      .load(du.image) 
      .asBitmap() 
      .into(new SimpleTarget<Bitmap>() { 
       @Override 
       public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { 
        image.setImageBitmap(resource); // Possibly runOnUiThread() 
        profileImage=resourec; 
       } 
      }); 

    builder.show(); 
} 

});

+0

공유를 위해 버튼을 사용 중입니다. 이미지 뷰에는 이미 이미지 전체 화면을 여는 데 사용되는 수신기가 있습니다. 문제는 내가 버튼을 클릭 할 때 공유를 위해 getbitmap과 동일한 위치에 Imageview를 전달해야 할 때입니다. 공유 버튼을 클릭하면 올바른 imageView가 전달되지 않습니다. – user2269164

+0

주는 null 포인터 예외입니다. – user2269164

+0

예 이미지 ID를 변경했습니다. – user2269164

0

당신은

  **@Override 
     public void onClick(View v) { 

     }** 

이 목록 항목의 올바른 탭 위치를 줄의에 대한 위치 사용자 수 있습니다.