2016-10-01 240 views
0

我有一个recyclerviewonClick的一项recyclerview我正在创建一个dialogDialog没有被解雇

Dialog获得创建的每个项目,但问题是,当我点击dialog剂量之外的剂量不会被解雇。它再次显示我点击的物品数量并创建了一个dialog

假设我现在单击一个项目dialog变得开放,如果我在外面点击它会被关闭。现在,如果我点击另一项并在外面点击,现在又第二次显示dialog一次,下一次点击它会被解雇。

接触适配器:

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactHolder> { 


    private List<Contact> contactList; 
    File myDir1; 
    private Context mContext; 

    private Boolean fileExists; 
    private File file; 

    public ContactAdapter(Context context, List<Contact> contactList) { 
     this.contactList = contactList; 
     this.mContext = context; 
    } 

    @Override 
    public ContactHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 

     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_layout,null); 
     ContactHolder mh = new ContactHolder(v); 

     return mh; 
    } 

    @Override 
    public void onBindViewHolder(final ContactHolder contactHolder, int i) { 

     final Contact contact = contactList.get(i); 
     // Log.e("Imagename",""+"http://xesoftwares.co.in/contactsapi/profile_images/85368a5bbd6cffba8a3aa202a80563a2.jpg");//+feedItem.getThumbnail()); 

     Target target = new Target() { 

      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 

       // your code here ... 
        contactHolder.thumbnail.setImageBitmap(bitmap); 

       Log.e("ProfileImage",contact.getmProfileImage()); 

        SaveImages(bitmap, contact.getmProfileImage()); 

      } 

      @Override 
      public void onBitmapFailed(Drawable errorDrawable) { 
       contactHolder.thumbnail.setImageDrawable(errorDrawable); 
       // do error handling as required 
      } 

      @Override 
      public void onPrepareLoad(Drawable placeHolderDrawable) { 
       contactHolder.thumbnail.setImageDrawable(placeHolderDrawable); 
      } 
     }; 

     contactHolder.thumbnail.setTag(target); 

     String url = ServiceUrl.getBaseUrl() + ServiceUrl.getImageUserUrl() + contact.getmProfileImage(); 

     Log.e("url",url); 

     if(contact.getmProfileImage().equals("")) 

     { 

      file = new File(""); 

      fileExists = file.exists(); 

      contactHolder.thumbnail.setImageDrawable(ContextCompat.getDrawable(mContext,R.drawable.ic_account_circle_black_48dp)); 
     } 
     else { 

      file = new File(Environment.getExternalStorageDirectory() + "/ContactProfileImages/" + contact.getmProfileImage()); 

      fileExists = file.exists(); 
     } 

     if(fileExists) 
     { 

      Log.e("fileExists",file.getAbsolutePath()); 

      BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
      Bitmap bitmap = BitmapFactory.decodeFile(file.getPath(), bmOptions); 
      contactHolder.thumbnail.setImageBitmap(bitmap); 

     } 

     else { 

      Log.e("Picasso",file.getAbsolutePath()); 

      Picasso.with(mContext).load(url) 
        .error(R.drawable.ic_account_circle_black_24dp) 
        .placeholder(R.drawable.ic_account_circle_black_24dp) 
        .resize(100, 100) 
        .into(target); 


     } 

     contactHolder.title.setText(contact.getmUserName()); 
     //feedListRowHolder.genre.setText(Html.fromHtml(feedItem.getGenre())); 

    } 

    @Override 
    public int getItemCount() { 
     return (null != contactList ? contactList.size() : 0); 
    } 

    public void SaveImages(Bitmap bitmap,String profileName) 
    { 

     try { 
      String root = Environment.getExternalStorageDirectory().getPath(); 
      File myDir = new File(root +"/ContactProfileImages"); 

      if (!myDir.exists()) { 
       myDir.mkdirs(); 
      } 

      // String name = new Date().toString();= 
      String name = profileName; 
      File myDir1 = new File(myDir, name); 
      if(!myDir1.exists()) { 
       FileOutputStream out = new FileOutputStream(myDir1); 
       bitmap.compress(Bitmap.CompressFormat.JPEG,100, out); 

       out.flush(); 
       out.close(); 
      } 


     } catch(Exception e){ 
      // some action 
     } 

     //myDir1= imageFilePath1.getprofile(); 

    } 


    public class ContactHolder extends RecyclerView.ViewHolder { 
     protected CircleImageView thumbnail; 
     protected TextView title; 

     public ContactHolder(View view) { 
      super(view); 
      this.thumbnail = (CircleImageView) view.findViewById(R.id.thumbnail); 
      this.title = (TextView) view.findViewById(R.id.title); 


     } 

    } 
} 

活动:

public class MainActivity extends AppCompatActivity implements GetContactsAsyncTask.ContactGetCallBack{ 

    private TextView txtuserName,txtmobile; 
    private static final String TAG = "RecyclerViewExample"; 
    private static String KEY_SUCCESS1 = "Success"; 
    private List<Contact> contactList = new ArrayList<>(); 
    private CircleImageView profileImage; 
    private RecyclerView recyclerView; 
    JSONArray contactListArray; 
    private ContactAdapter adapter; 
    Toolbar toolbar; 
    private NavigationView navigationView; 
    private DrawerLayout drawerLayout; 
    private SharedPreferences sharedpreferences; 
    private String mUserId; 
    private User mUser; 
    private String url; 
    private Intent mIntent; 
    private UserTableHelper mDb; 
    private Boolean firstTimeLogin,updateUser; 
    private static final int MY_PERMISSIONS_REQUEST_CALL = 20; 
    private ContactTableHelper contactDb; 

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

     contactDb = new ContactTableHelper(MainActivity.this); 
     mDb = new UserTableHelper(MainActivity.this); 

     sharedpreferences = getSharedPreferences("UserId", Context.MODE_PRIVATE); 

     mUserId = sharedpreferences.getString("userId",""); 

     sharedpreferences = getSharedPreferences("InitialLogin", Context.MODE_PRIVATE); 

     firstTimeLogin = sharedpreferences.getBoolean("login",false); 

     setupView(); 

     mUser = new User(); 
     sharedpreferences = getSharedPreferences("Url", Context.MODE_PRIVATE); 

     url= sharedpreferences.getString("url",""); 

     contactList = new ArrayList<Contact>(); 

     // new GetUserAsyncTask(mUserId).execute(mUserId); 


      // get reference to the views 
     txtuserName = (TextView) findViewById(R.id.txtusername); 
     txtmobile = (TextView) findViewById(R.id.txtmobile); 
     profileImage = (CircleImageView) findViewById(R.id.thumbnail); 

       if (profileImage != null) { 
        profileImage.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          drawerLayout.closeDrawers(); 
          Intent Intent = new Intent(MainActivity.this, ProfileActivity.class); 
          Intent.putExtra("url",url); 
          startActivity(Intent); 
         } 
        }); 
      } 
     } 

    void setupView() { 


     drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 


     navigationView = (NavigationView) findViewById(R.id.navigation_view); 


     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       drawerLayout.closeDrawers(); 
       menuItem.setChecked(true); 

       FragmentManager fragmentManager = getSupportFragmentManager(); 

       switch (menuItem.getItemId()) { 

        case R.id.nav_menu_contacts: 
         // TODO - Do something 

         // ContactFragment fragment = new ContactFragment(); 
        // fragmentManager.beginTransaction().replace(R.id.container, fragment).commit(); 

         break; 

        case R.id.nav_menu_settings: 

         break; 

        case R.id.nav_log_out: 

         sharedpreferences = getSharedPreferences("UserId", Context.MODE_PRIVATE); 

         mUserId = sharedpreferences.getString("userId",""); 

         finish(); 
         Intent i = new Intent(MainActivity.this,LoginActivity.class); 
         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
         startActivity(i); 

         break; 

        // TODO - Handle other items 
       } 
       return true; 
      } 
     }); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar); 
     TextView mTitle = (TextView) findViewById(R.id.toolbar_title); 
     Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT); 
     params.gravity = Gravity.CENTER_HORIZONTAL; 

     mTitle.setLayoutParams(params); 
     if (toolbar != null) { 
      toolbar.setTitle(""); 
      setSupportActionBar(toolbar); 

     } 

     if (toolbar != null) { 

      toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); 
      toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        drawerLayout.openDrawer(GravityCompat.START); 
        File sd = Environment.getExternalStorageDirectory(); 
        File image = new File(sd+"/Profile","Profile_Image.jpg"); 
        BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
        Bitmap bitmap = BitmapFactory.decodeFile(image.getPath(),bmOptions); 

        if(bitmap != null) { 
         profileImage.setImageBitmap(bitmap); 
        } 
        else { 
         profileImage.setImageDrawable(ContextCompat.getDrawable(MainActivity.this,R.drawable.ic_account_circle_white_48dp)); 
        } 
       } 
      }); 
     } 
    } 

    @Override 
    public void doPostExecute(JSONArray response) throws JSONException { 

     contactListArray = response; 

     contactDb = new ContactTableHelper(MainActivity.this); 

     if (null == contactList) { 
      contactList = new ArrayList<Contact>(); 
     } 

     for (int i = 0; i < contactListArray.length(); i++) { 
      JSONObject subObject1 = contactListArray.getJSONObject(i); 

       Contact contact = new Contact(); 
       JSONObject subObject = subObject1; 
       String contactName = subObject.getString("user_name"); 
       //name of the attribute in response 
       String contactId = subObject.getString("user_id"); 
       String contactMobile = subObject.getString("mobile_no"); 
       String contactEmailId = subObject.getString("email_id"); 
       String contactProfile = subObject.getString("profile_image"); 
       String fullName = subObject.getString("full_name"); 
       String jobTitle = subObject.getString("job_title"); 
       String homeAddress = subObject.getString("home_address"); 
       String workPhone = subObject.getString("work_phone"); 
       String workAddress = subObject.getString("work_address"); 

       contact.setmThumbnail(contactProfile); 
       contact.setmUserName(contactName); 
       contact.setmMobileNo(contactMobile); 
       contact.setmEmailId(contactEmailId); 
       contact.setmProfileImage(contactProfile); 
       contact.setContactId(contactId); 
       contact.setmHomeAddress(homeAddress); 
       contact.setmFullName(fullName); 
       contact.setmJobTitle(jobTitle); 
       contact.setmWorkAddress(workAddress); 
       contact.setmWorkPhone(workPhone); 

       contactList.add(contact);//adding string to arraylist 

      contactDb.addContact(new Contact(contactId,contactName,contactMobile,contactEmailId,contactProfile,fullName,jobTitle,workAddress,workPhone,homeAddress)); 
     } 

     adapter = new ContactAdapter(MainActivity.this, contactList); 
     recyclerView.setAdapter(adapter); 
    } 


    public interface ClickListener { 
     void onClick(View view, int position); 

     void onLongClick(View view, int position); 
    } 

    public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

     private GestureDetector gestureDetector; 
     private MainActivity.ClickListener mclickListener; 

     public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final MainActivity.ClickListener clickListener) 
     { 
      this.mclickListener = clickListener; 
      gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() 
      { 
       @Override 
       public boolean onSingleTapUp(MotionEvent e) { 
        return true; 
       } 

       @Override 
       public void onLongPress(MotionEvent e) 
       { 
        View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
        if (child != null && clickListener != null) 
        { 
         mclickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child)); 
        } 
       } 
      }); 
     } 

     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

      View child = rv.findChildViewUnder(e.getX(), e.getY()); 
      if (child != null && mclickListener != null && gestureDetector.onTouchEvent(e)) 
      { 
       mclickListener.onClick(child, rv.getChildAdapterPosition(child)); 
      } 
      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) 
     { 
     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) 
     { 

     } 
    } 

    @Override 
    public void onResume() 
    { 
     super.onResume(); 

     if(!firstTimeLogin) 
     { 
      contactList.clear(); 
      contactList = contactDb.getAllContacts(); 
      mUser = mDb.getUser(mUserId); 

     } 
     else { 
      new GetUserAsyncTask(mUserId).execute(mUserId); 
      new GetContactsAsyncTask(this, MainActivity.this, mUserId).execute(); 

      firstTimeLogin = false; 

      SharedPreferences.Editor editor = getSharedPreferences("InitialLogin",MODE_PRIVATE).edit(); 
      editor.putBoolean("login",firstTimeLogin); 
      editor.commit(); 
     } 

     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     recyclerView.setHasFixedSize(true); 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 

     adapter = new ContactAdapter(MainActivity.this, contactList); 
     recyclerView.setAdapter(adapter); 

     recyclerView.addOnItemTouchListener(new RecyclerTouchListener(MainActivity.this, recyclerView, new ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       final Contact contact = contactList.get(position); 

       // custom dialog 
       final Dialog dialog = new Dialog(MainActivity.this); 
       dialog.setCanceledOnTouchOutside(true); 
       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialog.setContentView(R.layout.custom); 
       final Window window = dialog.getWindow(); 

       WindowManager.LayoutParams wlp =window.getAttributes(); 
       wlp.gravity = Gravity.CENTER_HORIZONTAL|Gravity.TOP; 
       wlp.y=320; 
       window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
       window.setAttributes(wlp); 

       // set the custom dialog components - text, image and button 
       TextView txtusername = (TextView) dialog.findViewById(R.id.txtusername); 
       TextView txtmobile = (TextView) dialog.findViewById(R.id.txtmobile); 
       TextView txtemail = (TextView) dialog.findViewById(R.id.txtemail); 

       txtusername.setText(contact.getmUserName()); 
       txtemail.setText(contact.getmEmailId()); 
       txtmobile.setText(contact.getmMobileNo()); 

       SquareImageView image = (SquareImageView) dialog.findViewById(R.id.image); 
       ImageView image1 = (ImageView) dialog.findViewById(R.id.image1); 
       ImageView image2 = (ImageView) dialog.findViewById(R.id.image2); 
       ImageView image3 = (ImageView) dialog.findViewById(R.id.image3); 

       if(contact.getmProfileImage().equals("")) 

       { 
        image.setImageDrawable(ContextCompat.getDrawable(MainActivity.this,R.drawable.profile_icon)); 
       } 
       else { 
        File file = new File(Environment.getExternalStorageDirectory() + "/ContactProfileImages/" + contact.getmProfileImage()); 
        BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
        Bitmap bitmap = BitmapFactory.decodeFile(file.getPath(), bmOptions); 

        image.setImageBitmap(bitmap); 
       } 

       image1.setImageResource(R.drawable.ic_call_black_24dp); 
       image2.setImageResource(R.drawable.ic_textsms_black_24dp); 
       image3.setImageResource(R.drawable.ic_email_black_24dp); 

       image2.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 

         Uri sms_uri = Uri.parse("smsto:" + contact.getmMobileNo()); 
         Intent sms_intent = new Intent(Intent.ACTION_SENDTO, sms_uri); 
         startActivity(sms_intent); 
         dialog.dismiss(); 

        } 
       }); 

       image1.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 

         if (ContextCompat.checkSelfPermission(MainActivity.this, 
           Manifest.permission.CALL_PHONE) 
           != PackageManager.PERMISSION_GRANTED) { 

           ActivityCompat.requestPermissions(MainActivity.this, 
             new String[]{Manifest.permission.CALL_PHONE}, 
             MY_PERMISSIONS_REQUEST_CALL); 

          } 
         else { 

          Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + contact.getmMobileNo())); 
          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
          startActivity(intent); 
          dialog.dismiss(); 
         } 

        } 
       }); 

       image3.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         Intent intent = new Intent(Intent.ACTION_SENDTO); 
         intent.setData(Uri.parse("mailto:")); // only email apps should handle this 
         intent.putExtra(Intent.EXTRA_EMAIL,contact.getmEmailId()); 
         intent.putExtra(Intent.EXTRA_SUBJECT,""); 
         if (intent.resolveActivity(getPackageManager()) != null) { 
          startActivity(intent); 
         } 
        } 
       }); 

       Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK); 
       // if button is clicked, view all information custom dialog 

       dialogButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 

         Intent intent = new Intent(MainActivity.this,DetailViewActivity.class); 
         intent.putExtra("contact",contact); 
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
         startActivity(intent); 

        } 
       }); 
       dialog.show(); 
      } 

      @Override 
      public void onLongClick(View view, int position) { 

      } 
     })); 

    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case MY_PERMISSIONS_REQUEST_CALL: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        try { 

         Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:")); 
         startActivity(intent); 
        } 
        catch (SecurityException e) 
        { 

        } 
        // permission was granted, yay! Do the 
        // contacts-related task you need to do. 

       } else { 

        // permission denied, boo! Disable the 
        // functionality that depends on this permission. 
       } 
       return; 
      } 
     } 
    } 
} 

什么错吗?

+0

请提供完整的适配器代码我知道问题 –

+0

@Sid检查我的答案 –

+0

你不能直接添加onTouchListener()和onItemClickListener()以查看回收器视图...你应该点击recylerviewRow.setOnClickListener()以获得相同的 –

回答

1

的所有

先更换MainActivity

import android.app.Dialog; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.pm.PackageManager; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.content.ContextCompat; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.view.GestureDetector; 
import android.view.Gravity; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.notificationdemo.R; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.File; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity implements GetContactsAsyncTask.ContactGetCallBack{ 

    private TextView txtuserName,txtmobile; 
    private static final String TAG = "RecyclerViewExample"; 
    private static String KEY_SUCCESS1 = "Success"; 
    private List<Contact> contactList = new ArrayList<>(); 
    private CircleImageView profileImage; 
    private RecyclerView recyclerView; 
    JSONArray contactListArray; 
    private ContactAdapter adapter; 
    Toolbar toolbar; 
    private NavigationView navigationView; 
    private DrawerLayout drawerLayout; 
    private SharedPreferences sharedpreferences; 
    private String mUserId; 
    private User mUser; 
    private String url; 
    private Intent mIntent; 
    private UserTableHelper mDb; 
    private Boolean firstTimeLogin,updateUser; 
    private static final int MY_PERMISSIONS_REQUEST_CALL = 20; 
    private ContactTableHelper contactDb; 

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

     contactDb = new ContactTableHelper(MainActivity.this); 
     mDb = new UserTableHelper(MainActivity.this); 

     sharedpreferences = getSharedPreferences("UserId", Context.MODE_PRIVATE); 

     mUserId = sharedpreferences.getString("userId",""); 

     sharedpreferences = getSharedPreferences("InitialLogin", Context.MODE_PRIVATE); 

     firstTimeLogin = sharedpreferences.getBoolean("login",false); 

     setupView(); 

     mUser = new User(); 
     sharedpreferences = getSharedPreferences("Url", Context.MODE_PRIVATE); 

     url= sharedpreferences.getString("url",""); 

     contactList = new ArrayList<Contact>(); 

     // new GetUserAsyncTask(mUserId).execute(mUserId); 


      // get reference to the views 
     txtuserName = (TextView) findViewById(R.id.txtusername); 
     txtmobile = (TextView) findViewById(R.id.txtmobile); 
     profileImage = (CircleImageView) findViewById(R.id.thumbnail); 

       if (profileImage != null) { 
        profileImage.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          drawerLayout.closeDrawers(); 
          Intent Intent = new Intent(MainActivity.this, ProfileActivity.class); 
          Intent.putExtra("url",url); 
          startActivity(Intent); 
         } 
        }); 
      } 
     } 

    void setupView() { 


     drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 


     navigationView = (NavigationView) findViewById(R.id.navigation_view); 


     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       drawerLayout.closeDrawers(); 
       menuItem.setChecked(true); 

       FragmentManager fragmentManager = getSupportFragmentManager(); 

       switch (menuItem.getItemId()) { 

        case R.id.nav_menu_contacts: 
         // TODO - Do something 

         // ContactFragment fragment = new ContactFragment(); 
        // fragmentManager.beginTransaction().replace(R.id.container, fragment).commit(); 

         break; 

        case R.id.nav_menu_settings: 

         break; 

        case R.id.nav_log_out: 

         sharedpreferences = getSharedPreferences("UserId", Context.MODE_PRIVATE); 

         mUserId = sharedpreferences.getString("userId",""); 

         finish(); 
         Intent i = new Intent(MainActivity.this,LoginActivity.class); 
         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
         startActivity(i); 

         break; 

        // TODO - Handle other items 
       } 
       return true; 
      } 
     }); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar); 
     TextView mTitle = (TextView) findViewById(R.id.toolbar_title); 
     Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT); 
     params.gravity = Gravity.CENTER_HORIZONTAL; 

     mTitle.setLayoutParams(params); 
     if (toolbar != null) { 
      toolbar.setTitle(""); 
      setSupportActionBar(toolbar); 

     } 

     if (toolbar != null) { 

      toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); 
      toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        drawerLayout.openDrawer(GravityCompat.START); 
        File sd = Environment.getExternalStorageDirectory(); 
        File image = new File(sd+"/Profile","Profile_Image.jpg"); 
        BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
        Bitmap bitmap = BitmapFactory.decodeFile(image.getPath(),bmOptions); 

        if(bitmap != null) { 
         profileImage.setImageBitmap(bitmap); 
        } 
        else { 
         profileImage.setImageDrawable(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_account_circle_white_48dp)); 
        } 
       } 
      }); 
     } 
    } 

    @Override 
    public void doPostExecute(JSONArray response) throws JSONException { 

     contactListArray = response; 

     contactDb = new ContactTableHelper(MainActivity.this); 

     if (null == contactList) { 
      contactList = new ArrayList<Contact>(); 
     } 

     for (int i = 0; i < contactListArray.length(); i++) { 
      JSONObject subObject1 = contactListArray.getJSONObject(i); 

       Contact contact = new Contact(); 
       JSONObject subObject = subObject1; 
       String contactName = subObject.getString("user_name"); 
       //name of the attribute in response 
       String contactId = subObject.getString("user_id"); 
       String contactMobile = subObject.getString("mobile_no"); 
       String contactEmailId = subObject.getString("email_id"); 
       String contactProfile = subObject.getString("profile_image"); 
       String fullName = subObject.getString("full_name"); 
       String jobTitle = subObject.getString("job_title"); 
       String homeAddress = subObject.getString("home_address"); 
       String workPhone = subObject.getString("work_phone"); 
       String workAddress = subObject.getString("work_address"); 

       contact.setmThumbnail(contactProfile); 
       contact.setmUserName(contactName); 
       contact.setmMobileNo(contactMobile); 
       contact.setmEmailId(contactEmailId); 
       contact.setmProfileImage(contactProfile); 
       contact.setContactId(contactId); 
       contact.setmHomeAddress(homeAddress); 
       contact.setmFullName(fullName); 
       contact.setmJobTitle(jobTitle); 
       contact.setmWorkAddress(workAddress); 
       contact.setmWorkPhone(workPhone); 

       contactList.add(contact);//adding string to arraylist 

      contactDb.addContact(new Contact(contactId,contactName,contactMobile,contactEmailId,contactProfile,fullName,jobTitle,workAddress,workPhone,homeAddress)); 
     } 

     adapter = new ContactAdapter(MainActivity.this, contactList); 
     recyclerView.setAdapter(adapter); 
    } 


    public interface ClickListener { 
     void onClick(View view, int position); 

     void onLongClick(View view, int position); 
    } 

    public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

     private GestureDetector gestureDetector; 
     private MainActivity.ClickListener mclickListener; 

     public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final MainActivity.ClickListener clickListener) 
     { 
      this.mclickListener = clickListener; 
      gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() 
      { 
       @Override 
       public boolean onSingleTapUp(MotionEvent e) { 
        return true; 
       } 

       @Override 
       public void onLongPress(MotionEvent e) 
       { 
        View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
        if (child != null && clickListener != null) 
        { 
         mclickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child)); 
        } 
       } 
      }); 
     } 

     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

      View child = rv.findChildViewUnder(e.getX(), e.getY()); 
      if (child != null && mclickListener != null && gestureDetector.onTouchEvent(e)) 
      { 
       mclickListener.onClick(child, rv.getChildAdapterPosition(child)); 
      } 
      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) 
     { 
     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) 
     { 

     } 
    } 

    @Override 
    public void onResume() 
    { 
     super.onResume(); 

     if(!firstTimeLogin) 
     { 
      contactList.clear(); 
      contactList = contactDb.getAllContacts(); 
      mUser = mDb.getUser(mUserId); 

     } 
     else { 
      new GetUserAsyncTask(mUserId).execute(mUserId); 
      new GetContactsAsyncTask(this, MainActivity.this, mUserId).execute(); 

      firstTimeLogin = false; 

      SharedPreferences.Editor editor = getSharedPreferences("InitialLogin",MODE_PRIVATE).edit(); 
      editor.putBoolean("login",firstTimeLogin); 
      editor.commit(); 
     } 

     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     recyclerView.setHasFixedSize(true); 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 

     adapter = new ContactAdapter(MainActivity.this, contactList); 
     recyclerView.setAdapter(adapter); 

     recyclerView.addOnItemTouchListener(new RecyclerTouchListener(MainActivity.this, recyclerView, new ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       final Contact contact = contactList.get(position); 

       // custom dialog 

      } 

      @Override 
      public void onLongClick(View view, int position) { 

      } 
     })); 

    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case MY_PERMISSIONS_REQUEST_CALL: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        try { 

         Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:")); 
         startActivity(intent); 
        } 
        catch (SecurityException e) 
        { 

        } 
        // permission was granted, yay! Do the 
        // contacts-related task you need to do. 

       } else { 

        // permission denied, boo! Disable the 
        // functionality that depends on this permission. 
       } 
       return; 
      } 
     } 
    } 
} 

更换适配器

import android.app.Activity; 
import android.app.Dialog; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.graphics.drawable.Drawable; 
import android.net.Uri; 
import android.os.Environment; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.util.Log; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.notificationdemo.R; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.lang.annotation.Target; 

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactHolder> { 


    private List<Contact> contactList; 
    File myDir1; 
    private Activity mContext; 

    private Boolean fileExists; 
    private File file; 

    public ContactAdapter(Activity context, List<Contact> contactList) { 
     this.contactList = contactList; 
     this.mContext = context; 
    } 

    @Override 
    public ContactHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 

     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_layout,null); 
     ContactHolder mh = new ContactHolder(v); 

     return mh; 
    } 

    @Override 
    public void onBindViewHolder(final ContactHolder contactHolder, int i) { 

     final Contact contact = contactList.get(i); 
     // Log.e("Imagename",""+"http://xesoftwares.co.in/contactsapi/profile_images/85368a5bbd6cffba8a3aa202a80563a2.jpg");//+feedItem.getThumbnail()); 

     Target target = new Target() { 

      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 

       // your code here ... 
        contactHolder.thumbnail.setImageBitmap(bitmap); 

       Log.e("ProfileImage", contact.getmProfileImage()); 

        SaveImages(bitmap, contact.getmProfileImage()); 

      } 

      @Override 
      public void onBitmapFailed(Drawable errorDrawable) { 
       contactHolder.thumbnail.setImageDrawable(errorDrawable); 
       // do error handling as required 
      } 

      @Override 
      public void onPrepareLoad(Drawable placeHolderDrawable) { 
       contactHolder.thumbnail.setImageDrawable(placeHolderDrawable); 
      } 
     }; 

     contactHolder.thumbnail.setTag(target); 

     String url = ServiceUrl.getBaseUrl() + ServiceUrl.getImageUserUrl() + contact.getmProfileImage(); 

     Log.e("url",url); 

     if(contact.getmProfileImage().equals("")) 

     { 

      file = new File(""); 

      fileExists = file.exists(); 

      contactHolder.thumbnail.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.ic_account_circle_black_48dp)); 
     } 
     else { 

      file = new File(Environment.getExternalStorageDirectory() + "/ContactProfileImages/" + contact.getmProfileImage()); 

      fileExists = file.exists(); 
     } 

     if(fileExists) 
     { 

      Log.e("fileExists",file.getAbsolutePath()); 

      BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
      Bitmap bitmap = BitmapFactory.decodeFile(file.getPath(), bmOptions); 
      contactHolder.thumbnail.setImageBitmap(bitmap); 

     } 

     else { 

      Log.e("Picasso",file.getAbsolutePath()); 

      Picasso.with(mContext).load(url) 
        .error(R.drawable.ic_account_circle_black_24dp) 
        .placeholder(R.drawable.ic_account_circle_black_24dp) 
        .resize(100, 100) 
        .into(target); 


     } 

     contactHolder.title.setText(contact.getmUserName()); 
     //feedListRowHolder.genre.setText(Html.fromHtml(feedItem.getGenre())); 





    } 

    @Override 
    public int getItemCount() { 
     return (null != contactList ? contactList.size() : 0); 
    } 

    public void SaveImages(Bitmap bitmap,String profileName) 
    { 

     try { 
      String root = Environment.getExternalStorageDirectory().getPath(); 
      File myDir = new File(root +"/ContactProfileImages"); 

      if (!myDir.exists()) { 
       myDir.mkdirs(); 
      } 

      // String name = new Date().toString();= 
      String name = profileName; 
      File myDir1 = new File(myDir, name); 
      if(!myDir1.exists()) { 
       FileOutputStream out = new FileOutputStream(myDir1); 
       bitmap.compress(Bitmap.CompressFormat.JPEG,100, out); 

       out.flush(); 
       out.close(); 
      } 


     } catch(Exception e){ 
      // some action 
     } 

     //myDir1= imageFilePath1.getprofile(); 

    } 


    public class ContactHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     protected CircleImageView thumbnail; 
     protected TextView title; 

     public ContactHolder(View view) { 
      super(view); 
      this.thumbnail = (CircleImageView) view.findViewById(R.id.thumbnail); 
      this.title = (TextView) view.findViewById(R.id.title); 
      view.setOnClickListener(this); 





     } 

     @Override 
     public void onClick(View v) { 

      final Contact contact = contactList.get(getAdapterPosition()); 

      final Dialog dialog = new Dialog(mContext); 
      dialog.setCanceledOnTouchOutside(true); 
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog.setContentView(R.layout.custom); 
      final Window window = dialog.getWindow(); 

      WindowManager.LayoutParams wlp =window.getAttributes(); 
      wlp.gravity = Gravity.CENTER_HORIZONTAL|Gravity.TOP; 
      wlp.y=320; 
      window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
      window.setAttributes(wlp); 

      // set the custom dialog components - text, image and button 
      TextView txtusername = (TextView) dialog.findViewById(R.id.txtusername); 
      TextView txtmobile = (TextView) dialog.findViewById(R.id.txtmobile); 
      TextView txtemail = (TextView) dialog.findViewById(R.id.txtemail); 

      txtusername.setText(contact.getmUserName()); 
      txtemail.setText(contact.getmEmailId()); 
      txtmobile.setText(contact.getmMobileNo()); 

      SquareImageView image = (SquareImageView) dialog.findViewById(R.id.image); 
      ImageView image1 = (ImageView) dialog.findViewById(R.id.image1); 
      ImageView image2 = (ImageView) dialog.findViewById(R.id.image2); 
      ImageView image3 = (ImageView) dialog.findViewById(R.id.image3); 

      if(contact.getmProfileImage().equals("")) 

      { 
       image.setImageDrawable(ContextCompat.getDrawable(mContext,R.drawable.profile_icon)); 
      } 
      else { 
       File file = new File(Environment.getExternalStorageDirectory() + "/ContactProfileImages/" + contact.getmProfileImage()); 
       BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
       Bitmap bitmap = BitmapFactory.decodeFile(file.getPath(), bmOptions); 

       image.setImageBitmap(bitmap); 
      } 

      image1.setImageResource(R.drawable.ic_call_black_24dp); 
      image2.setImageResource(R.drawable.ic_textsms_black_24dp); 
      image3.setImageResource(R.drawable.ic_email_black_24dp); 

      image2.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        Uri sms_uri = Uri.parse("smsto:" + contact.getmMobileNo()); 
        Intent sms_intent = new Intent(Intent.ACTION_SENDTO, sms_uri); 
        mContext.startActivity(sms_intent); 
        dialog.dismiss(); 

       } 
      }); 

      image1.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        if (ContextCompat.checkSelfPermission(mContext, 
          Manifest.permission.CALL_PHONE) 
          != PackageManager.PERMISSION_GRANTED) { 

         ActivityCompat.requestPermissions(mContext, 
           new String[]{Manifest.permission.CALL_PHONE}, 
           MY_PERMISSIONS_REQUEST_CALL); 

        } 
        else { 

         Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + contact.getmMobileNo())); 
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
         mContext.startActivity(intent); 
         dialog.dismiss(); 
        } 

       } 
      }); 

      image3.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent = new Intent(Intent.ACTION_SENDTO); 
        intent.setData(Uri.parse("mailto:")); // only email apps should handle this 
        intent.putExtra(Intent.EXTRA_EMAIL,contact.getmEmailId()); 
        intent.putExtra(Intent.EXTRA_SUBJECT,""); 
        if (intent.resolveActivity(getPackageManager()) != null) { 
         mContext.startActivity(intent); 
        } 
       } 
      }); 

      Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK); 
      // if button is clicked, view all information custom dialog 

      dialogButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 

        Intent intent = new Intent(mContext,DetailViewActivity.class); 
        intent.putExtra("contact",contact); 
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
        mContext.startActivity(intent); 

       } 
      }); 
      dialog.show(); 



     } 
    } 
} 
+0

工作..谢谢你.. @ Mohit Trivedi – Sid

+0

你能帮我这个链接吗? http://stackoverflow.com/questions/39797972/set-minimum-height-to-the-collapsing-toolbar-and-show-it-as-expanded @Mohit Trivedi – Sid

-1

试试这段代码:取消自定义对话框布局中的解除按钮。

Button cancel = (Button) dialog.findViewById(R.id.cancel); 

cancel.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View arg0) { 
    dialog.dismiss(); 

} 
}); 
+0

不要修改它的布局,因为UI已经为他提供 –

+0

@MohitTrivedi假设用户想取消对话框,然后取消按钮显示在布局 –