package com.lincanbin.carbonforum.adapter; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.os.Build; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebSettings; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import com.lincanbin.carbonforum.R; import com.lincanbin.carbonforum.ReplyActivity; import com.lincanbin.carbonforum.TopicActivity; import com.lincanbin.carbonforum.application.CarbonForumApplication; import com.lincanbin.carbonforum.config.APIAddress; import com.lincanbin.carbonforum.util.TimeUtil; import com.lincanbin.carbonforum.view.CarbonWebView; import java.util.List; import java.util.Map; /** * Created by 灿斌 on 10/13/2015. */ public class PostAdapter extends RecyclerView.Adapter{ private Context context; private Boolean isNotification; private LayoutInflater layoutInflater; public interface OnRecyclerViewListener { void onItemClick(int position); boolean onItemLongClick(int position); } private OnRecyclerViewListener onRecyclerViewListener; public void setOnRecyclerViewListener(OnRecyclerViewListener onRecyclerViewListener) { this.onRecyclerViewListener = onRecyclerViewListener; } private static final String TAG = PostAdapter.class.getSimpleName(); private List<Map<String,Object>> list; public PostAdapter(Context context, Boolean isNotification){ this.context = context; this.isNotification = isNotification; layoutInflater = LayoutInflater.from(context); } public void setData(List<Map<String,Object>> list) { this.list = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = layoutInflater.inflate(R.layout.item_post_list, null); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); view.setLayoutParams(lp); return new postViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { final postViewHolder holder = (postViewHolder) viewHolder; holder.position = i; final Map<String,Object> post = list.get(i); holder.UserName.setText(post.get("UserName").toString()); holder.Time.setText(TimeUtil.formatTime(context, Long.parseLong(post.get("PostTime").toString()))); if(!isNotification && !post.get("PostFloor").toString().equals("0")) holder.PostFloor.setText("#" + post.get("PostFloor").toString()); String contentHTML = "<style>" + "a, a:link, a:visited, a:active {" + " color: #555555;" + " text-decoration: none;" + " word-wrap: break-word;" + "}" + "a:hover {" + " color: #7aa1b0;" + "}" + "p, h3{" + " color:#616161;" + "}" + "img, video{" + " display: inline;" + " height: auto;" + " max-width: 100%;" + "}" + "</style>"; if(isNotification){ contentHTML += "<h3>" + post.get("Subject").toString() + "</h3>"; } //String uploadDomain = APIAddress.WEBSITE_PATH.length() > 0 ? APIAddress.DOMAIN_NAME.replace(APIAddress.WEBSITE_PATH, "") : APIAddress.DOMAIN_NAME; //contentHTML += post.get("Content").toString().replace("=\"/", "=\"" + uploadDomain + "/"); contentHTML += post.get("Content").toString(); //Log.v("Post"+ post.get("ID").toString(), contentHTML); holder.Content.loadDataWithBaseURL(APIAddress.MOBILE_DOMAIN_NAME, contentHTML, "text/html", "utf-8", null); Glide.with(context).load(APIAddress.MIDDLE_AVATAR_URL(post.get("UserID").toString(), "middle")).into(holder.Avatar); holder.ReplyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(context, ReplyActivity.class); intent.putExtra("TopicID", post.get("TopicID").toString()); intent.putExtra("PostID", post.get("ID").toString()); intent.putExtra("PostFloor", post.get("PostFloor").toString()); intent.putExtra("UserName", post.get("UserName").toString()); intent.putExtra("DefaultContent", ""); context.startActivity(intent); } }); if(!CarbonForumApplication.isLoggedIn()){ holder.ReplyButton.setVisibility(View.INVISIBLE); } } @Override public int getItemCount() { return list.size(); } class postViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { public View cardView; View rootView; ImageView Avatar; TextView Time; TextView UserName; TextView PostFloor; ImageView ReplyButton; CarbonWebView Content; public int position; public postViewHolder(View itemView) { super(itemView); UserName = (TextView) itemView.findViewById(R.id.username); PostFloor = (TextView) itemView.findViewById(R.id.floor); ReplyButton = (ImageView)itemView.findViewById(R.id.reply_button); Content = (CarbonWebView) itemView.findViewById(R.id.content); if(Build.VERSION.SDK_INT <= 19) { // http://stackoverflow.com/questions/15133132/android-webview-doesnt-display-web-page-in-some-cases Content.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } else { //Content.setLayerType(View.LAYER_TYPE_HARDWARE, null); //Content.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 修复显示长帖时申请不到内存的bug // http://stackoverflow.com/questions/18471194/webview-in-scrollview-view-too-large-to-fit-into-drawing-cache-how-to-rewor Content.setLayerType(View.LAYER_TYPE_NONE, null); } // http://stackoverflow.com/questions/5003156/android-webview-style-background-colortransparent-ignored-on-android-2-2 Content.setBackgroundColor(Color.TRANSPARENT); Content.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//优先使用缓存 // http://stackoverflow.com/questions/3099344/can-androids-webview-automatically-resize-huge-images/12327010#12327010 Content.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//自动缩放图片 // Use WideViewport and Zoom out if there is no viewport defined //Content.getSettings().setUseWideViewPort(true); /* // Enable remote debugging via chrome://inspect if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } */ Time = (TextView) itemView.findViewById(R.id.time); Avatar = (ImageView)itemView.findViewById(R.id.avatar); cardView = itemView.findViewById(R.id.post_card_item); rootView = itemView.findViewById(R.id.post_item); rootView.setOnClickListener(this); rootView.setOnLongClickListener(this); } @Override //点击事件 public void onClick(View v) { //Toast.makeText(context, "onItemClick", Toast.LENGTH_SHORT).show(); if(isNotification) { Intent intent = new Intent(context, TopicActivity.class); intent.putExtra("Topic", list.get(position).get("Subject").toString()); intent.putExtra("TopicID", list.get(position).get("TopicID").toString()); intent.putExtra("TargetPage", "1"); context.startActivity(intent); //if (null != onRecyclerViewListener) { // onRecyclerViewListener.onItemClick(position); //} } } @Override //长按事件 public boolean onLongClick(View v) { //ReplyButton.callOnClick(); if(null != onRecyclerViewListener){ return onRecyclerViewListener.onItemLongClick(position); } return false; } } }