package net.oschina.gitapp.adapter; import java.util.List; import net.oschina.gitapp.R; import net.oschina.gitapp.bean.Commit; import net.oschina.gitapp.bean.CommitDiff; import net.oschina.gitapp.bean.Project; import net.oschina.gitapp.common.UIHelper; import android.content.Context; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; /** * 项目Commit diff列表适配器 * * @created 2014-06-13 * @author 火蚁(http://my.oschina.net/LittleDY) * * 最后更新: 更新者: */ public class CommitDiffListAdapter { private LinearLayout commitGroupView;// commitDiff的view总和 private Context context;// 运行上下文 private List<CommitDiff> listData;// 数据集合 private LayoutInflater listContainer;// 视图容器 private int itemViewResource;// 自定义项视图源id private Project project; private Commit commit; /** * 实例化MyBaseAdapter * * @param context * @param data * @param resource */ public CommitDiffListAdapter(Context context, List<CommitDiff> data, int resource, LinearLayout view) { this.context = context; this.listContainer = LayoutInflater.from(context); // 创建视图容器并设置上下文 this.itemViewResource = resource; this.listData = data; this.commitGroupView = view; } public void setData(Project project, Commit commit) { this.project = project; this.commit = commit; } public void add(int position) { final CommitDiff commitDiff = listData.get(position); // 获取list_item布局文件的视图 View convertView = listContainer.inflate(this.itemViewResource, null); // 获取控件对象 View ll = convertView.findViewById(R.id.commit_diff_ll); ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showCommitDiffDetail(commitDiff); } }); TextView file_name = (TextView) convertView .findViewById(R.id.commit_diff_file_name); TextView folder = (TextView) convertView .findViewById(R.id.commit_diff_folder); TextView stats = (TextView) convertView .findViewById(R.id.commit_diff_stats); TextView file = (TextView) convertView .findViewById(R.id.commit_diff_file); file_name.setText(getFileName(commitDiff)); folder.setText(getFilePath(commitDiff)); String diff = getCommitFileDiff(commitDiff); // 显示文件的内容 if (!TextUtils.isEmpty(diff)) { file.setText(diff); } else { file.setVisibility(View.GONE); } commitGroupView.addView(convertView); } public void notifyDataSetChanged() { int sum = listData.size() >= 20 ? 20 : listData.size(); for (int i = 0; i < sum; i++) { add(i); } } private String getFileName(CommitDiff commitDiff) { String res = commitDiff.getNew_path(); int index = commitDiff.getNew_path().lastIndexOf("/"); if (index > 0) { res = res.substring(index + 1); } return res; } private String getFilePath(CommitDiff commitDiff) { String res = commitDiff.getNew_path(); int index = commitDiff.getNew_path().lastIndexOf("/"); if (index > 0) { res = res.substring(0, index); } return res; } //文本文件才会显示文本出来 private String getCommitFileDiff(CommitDiff commitDiff) { if (commitDiff.getType().equalsIgnoreCase(CommitDiff.TYPE_TEXT)) { return commitDiff.getDiff().substring( commitDiff.getDiff().indexOf("@")); } else { return ""; } } private void showCommitDiffDetail(CommitDiff commitDiff) { if (commitDiff.getType().equalsIgnoreCase(CommitDiff.TYPE_BINARY)) { } else { UIHelper.showCommitDiffFileDetail(context, project, commit, commitDiff); } } }