Java android可循环使用,绝对布局,动态创建的编辑文本在新行中自动重复
我创建了一个循环视图,其中包含图像文档的图像文档列表。我已经创建了一些动态创建的编辑文本字段。。运行代码时,第二行编辑文本将自动显示在第七行。我已经检查了第7行的日志:在动态创建的日志中,编辑文本未调用 我在绝对布局中创建了动态编辑文本字段。所以我试图隐藏绝对布局,它不包含树映射的值意味着数组列表大小为零 树形图数据:值是动态创建字段坐标的数组列表。Java android可循环使用,绝对布局,动态创建的编辑文本在新行中自动重复,java,android,absolute,Java,Android,Absolute,我创建了一个循环视图,其中包含图像文档的图像文档列表。我已经创建了一些动态创建的编辑文本字段。。运行代码时,第二行编辑文本将自动显示在第七行。我已经检查了第7行的日志:在动态创建的日志中,编辑文本未调用 我在绝对布局中创建了动态编辑文本字段。所以我试图隐藏绝对布局,它不包含树映射的值意味着数组列表大小为零 树形图数据:值是动态创建字段坐标的数组列表。 适配器类: 公共类TemplateImageAdapter扩展了RecyclerView.Adapter/*实现了View.OnTouchLi
适配器类:
公共类TemplateImageAdapter扩展了RecyclerView.Adapter/*实现了View.OnTouchListener*/{
//ArrayList Templaters;
树映射myMap;
绝对地;
LinearLayout.LayoutParams参数;
int height_data=0;
int width_data=0;
私有上下文;
私有整数[]mKeys;
字符串模板名;
int键;
AbsoluteLayout.LayoutParams paramData;
实体=新实体();
Entities.Communicator Communicator=Entities.new Communicator();
Entities.Server=Entities.new Server();
字符串CoordinateRatio=“”,CoordinateRatio=“”,elementWidthRatio=“”,elementHeightRatio=“”,fieldType=“”;
/*
*//*-------------------------------------------*//*
私有静态最终字符串TAG1=“Touch”;
@SuppressWarnings(“unused”)`在此处输入代码`
专用静态最终浮动最小缩放=1f,最大缩放=1f;
矩阵=新矩阵();
矩阵savedMatrix=新矩阵();
//用户试图执行的3个状态(事件)
静态最终int NONE=0;
静态最终整数阻力=1;
静态最终整数缩放=2;
int模式=无;
//这些PointF对象用于记录用户触摸的点
PointF start=新的PointF();
PointF mid=新的PointF();
浮动oldDist=1f;
*//*-------------------------------------------*/
公共TemplateImageAdapter(上下文ctx、树映射myMapData){
//this.templateLists=新的ArrayList(templateLists);
//this.myMap=newhashmap();
this.myMap=myMapData;
mKeys=myMap.keySet().toArray(新整数[myMapData.size()]);
//mKeys=myMap.keySet().toArray(新字符串[myMapData.size()]);
mContext=ctx;
}
/*@覆盖
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.document\u list\u项,parent,false);
返回新的视图持有者(v);
}
*/
@凌驾
public TemplateImageAdapter.ViewHolder onCreateViewHolder(ViewGroup父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.gallery_缩略图,parent,false);
视窗支架vh=新视窗支架(v);
返回vh;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
CoordinateRatio=“”;CoordinateRatio=“”;elementWidthRatio=“”;elementHeightRatio=“”;fieldType=“”;
ll.setVisibility(视图不可见);
ll.setVisibility(View.GONE);
holder.bindData(myMap.get(position));
最终int keytemp=mKeys[位置];
//keytemp=Integer.parseInt(键);
键=键温度;
int pageNumber=1;
String access\u token=ViewTemplate.access\u tokenTemp;
试一试{
communicator.URL=新URL(server.URL+“/templates/getpageimage?templateId=“+ViewTemplate.templateIdTemp+”&pageNumber=“+(位置+1)+”&access_标记=“+access_标记”);
}捕获(格式错误){
e、 printStackTrace();
}
字符串img_url=”“+communicator.url;
System.out.println(“img\u url==”+img\u url);
/*滑翔。带(mContext)。装载(R。可牵引。记录受伤)*/
Glide.with(mContext.load)(img_url)
.缩略图(0.5f)
.crossFade()
.diskCacheStrategy(diskCacheStrategy.ALL)
.插入(支架.缩略图);
/*TouchImageViewgeView img=新的TouchImageView(此);
img.setImageResource(R.drawable.ice_age_2);
img.setMaxZoom(4f);
setContentView(img)*/
holder.documentName.setText(“文件名”);
if(myMap.get(key.size()>0){
System.out.println(“带数据的键==”+键);
ViewTreeObserver observer=ll.getViewTreeObserver();
observer.addOnGlobalLayoutListener(新的ViewTreeObserver.OnGlobalLayoutListener(){
@凌驾
公共图书馆{
//TODO自动生成的方法存根
init();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.JELLY\u BEAN){
ll.getViewTreeObserver().removeOnGlobalLayoutListener(此);
}否则{
//无检查弃用
ll.getViewTreeObserver().RemoveGlobalOnlyOutliner(此文件);
}
//ll.getViewTreeObserver().RemoveGlobalOnlyOutliner(此文件);
System.out.println(“height=“+height\u data”);
System.out.println(“width=“+width\u数据”);
//myMap.get(“1”).get(0).getAllfields_CoordinationExRatio()
/*字符串CoordinateRatio=“”,CoordinateRatio=“”,elementWidthRatio=“”,elementHeightRatio=“”,fieldType=“”*/
CoordinateRatio=“”;CoordinateRatio=“”;elementWidthRatio=“”;elementHeightRatio=“”;fieldType=“”;
对于(int i=0;每当项目视图可见时,都会调用BindView上的i,这取决于它是否循环使用。因此,每次调用BindView时,您的布局都会添加到绝对布局ll。我建议您通过调用onBindview上的方法ll.removeAllViews();删除ll的所有视图,然后
<com.nm.esign.entities.ZoomLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/zoom_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.v7.widget.CardView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardUseCompatPadding="true"
app:cardElevation="4dp"
app:cardCornerRadius="3dp" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fl_zoom_adapter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- <TextView
android:id="@+id/txt_img_document_name_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/white"
android:gravity="center"
android:text="name"
android:layout_alignParentBottom="true"
/>-->
<ImageView
android:id="@+id/thumbnail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
/>
<AbsoluteLayout
android:id="@+id/ll_image_tempplate"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
</AbsoluteLayout >
<!-- <TextView
android:id="@+id/txt_img_document_name_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/black"
android:gravity="center"
android:text="name"></TextView>-->
</FrameLayout>
<TextView
android:id="@+id/txt_img_document_name_item"
android:layout_width="match_parent"
android:layout_height="20dp"
android:textSize="13sp"
android:textColor="@color/white"
android:gravity="center"
android:layout_alignParentBottom="true"
android:background="@android:color/transparent"/>
</LinearLayout>
</android.support.v7.widget.CardView>
</com.nm.esign.entities.ZoomLayout>
adapter class:
public class TemplateImageAdapter extends RecyclerView.Adapter<TemplateImageAdapter.ViewHolder> /* implements View.OnTouchListener*/{
// ArrayList<TemplateFieldList> templateLists;
TreeMap<Integer, ArrayList<TemplateFieldList> > myMap;
AbsoluteLayout ll;
LinearLayout.LayoutParams param;
int height_data=0;
int width_data=0;
private Context mContext;
private Integer[] mKeys;
String templateName;
int key;
AbsoluteLayout.LayoutParams paramData;
Entities entities=new Entities();
Entities.Communicator communicator=entities.new Communicator();
Entities.Server server=entities.new Server();
String coordinateXRatio="",coordinateYRatio="",elementWidthRatio="",elementHeightRatio="",fieldType="";
/*
*//*-------------------------------------------*//*
private static final String TAG1 = "Touch";
@SuppressWarnings("unused")`enter code here`
private static final float MIN_ZOOM = 1f, MAX_ZOOM = 1f;
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
// The 3 states (events) which the user is trying to perform
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
// these PointF objects are used to record the point(s) the user is touching
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;
*//*-------------------------------------------*/
public TemplateImageAdapter(Context ctx, TreeMap<Integer, ArrayList<TemplateFieldList>> myMapData ) {
// this.templateLists = new ArrayList<>(templateLists);
// this.myMap= new HashMap<String, ArrayList<TemplateFieldList>>();
this.myMap=myMapData;
mKeys= myMap.keySet().toArray(new Integer[myMapData.size()]);
//mKeys = myMap.keySet().toArray(new String[myMapData.size()]);
mContext = ctx;
}
/* @Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.document_list_item, parent, false);
return new ViewHolder(v);
}
*/
@Override
public TemplateImageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.gallery_thumbnail, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
coordinateXRatio=""; coordinateYRatio=""; elementWidthRatio=""; elementHeightRatio=""; fieldType="";
ll.setVisibility(View.INVISIBLE);
ll.setVisibility(View.GONE);
holder.bindData(myMap.get(position));
final int keytemp = mKeys[position];
// keytemp=Integer.parseInt(key);
key=keytemp;
int pageNumber=1;
String access_token=ViewTemplate.access_tokenTemp;
try {
communicator.urls = new URL(server.url + "/templates/getpageimage?templateId="+ViewTemplate.templateIdTemp+ "&pageNumber=" +(position+1)+ "&access_token=" +access_token );
} catch (MalformedURLException e) {
e.printStackTrace();
}
String img_url= ""+communicator.urls;
System.out.println("img_url=="+img_url);
/* Glide.with(mContext).load(R.drawable.register_injury)*/
Glide.with(mContext).load(img_url)
.thumbnail(0.5f)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.thumbnail);
/*TouchImageViewgeView img = new TouchImageView(this);
img.setImageResource(R.drawable.ice_age_2);
img.setMaxZoom(4f);
setContentView(img);*/
holder.documentName.setText("document name");
if(myMap.get(key).size()>0) {
System.out.println("key with data=="+key);
ViewTreeObserver observer = ll.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
init();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
ll.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
//noinspection deprecation
ll.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
// ll.getViewTreeObserver().removeGlobalOnLayoutListener(this);
System.out.println("height="+height_data);
System.out.println("width="+width_data);
// myMap.get("1").get(0).getAllfields_coordinateXRatio()
/* String coordinateXRatio="",coordinateYRatio="",elementWidthRatio="",elementHeightRatio="",fieldType="";*/
coordinateXRatio=""; coordinateYRatio=""; elementWidthRatio=""; elementHeightRatio=""; fieldType="";
for(int i=0;i<myMap.get(key).size();i++) {
ll.setVisibility(View.VISIBLE);
coordinateXRatio = myMap.get(key).get(i).getAllfields_coordinateXRatio();
coordinateYRatio = myMap.get(key).get(i).getAllfields_coordinateYRatio();
elementWidthRatio = myMap.get(key).get(i).getAllfields_elementWidthRatio();
elementHeightRatio = myMap.get(key).get(i).getAllfields_elementHeightRatio();
fieldType = myMap.get(key).get(i).getAllfields_fieldType();
System.out.println("coordinateXRatio=" + coordinateXRatio);
System.out.println("coordinateYRatio=" + coordinateYRatio);
System.out.println("elementHeightRatio=" + elementHeightRatio);
System.out.println("fieldType=" + fieldType);
getParameter(coordinateXRatio, coordinateYRatio, elementWidthRatio, elementHeightRatio, fieldType, i);
coordinateXRatio = "";
coordinateYRatio = "";
elementWidthRatio ="";
elementHeightRatio = "";
fieldType = "";
}
}
});
}
ll.setVisibility(View.INVISIBLE);
// ll.setVisibility(View.GONE);
}
public void getParameter(String coordinateXRatio,String coordinateYRatio,String elementWidthRatio,String elementHeightRatio,String fieldType,int i) {
int left = (int) (width_data * Double.parseDouble(coordinateXRatio));
int top = (int) (height_data * Double.parseDouble(coordinateYRatio));
int widthData=(int) (width_data * Double.parseDouble(elementWidthRatio));
int heightData=(int) (height_data * Double.parseDouble(elementHeightRatio));
paramData = new AbsoluteLayout.LayoutParams(widthData, heightData, left, top);
Calendar calendar;
int year, month, day;
// LinearLayout.LayoutParams params = new TableLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
if(fieldType.trim().equals("textfield") ) {
EditText et = new EditText(mContext.getApplicationContext());
et.setLayoutParams(paramData);
et.setTextSize(6);
et.setPadding(0, 0, 0, 0);
//et.setText("Dynamic EditText!");
et.setBackgroundColor(Color.parseColor("#c7ecfc"));
ll.addView(et);
} else if(fieldType.trim().equals("checkboxfield")) {
CheckBox cb = new CheckBox(mContext.getApplicationContext());
cb.setLayoutParams(paramData);
cb.setTextSize(6);
cb.setPadding(0, 0, 0, 0);
// cb.setText("ckb");
cb.setBackgroundColor(Color.parseColor("#c7ecfc"));
ll.addView(cb);
} else if(fieldType.trim().equals("initialfield") ) {
EditText et = new EditText(mContext.getApplicationContext());
/*InputMethodManager imm = (InputMethodManager)mContext. getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);*/
et.setLayoutParams(paramData);
et.setTextSize(6);
et.setPadding(0, 0, 0, 0);
//et.setText("Dynamic EditText!");
et.setBackgroundColor(Color.parseColor("#c7ecfc"));
ll.addView(et);
} else if(fieldType.trim().equals("securedfield") ) {
TextView et = new TextView(mContext.getApplicationContext());
et.setLayoutParams(paramData);
et.setTextSize(6);
et.setPadding(0, 0, 0, 0);
// et.setText("Dynamic EditText!");
et.setBackgroundColor(Color.parseColor("#c7ecfc"));
ll.addView(et);
} else if(fieldType.trim().equals("signfield") ) {
CheckBox et = new CheckBox(mContext.getApplicationContext());
et.setLayoutParams(paramData);
et.setTextSize(6);
et.setPadding(0, 0, 0, 0);
// et.setText("Dynamic EditText!");
et.setBackgroundColor(Color.parseColor("#c7ecfc"));
ll.addView(et);
} else if(fieldType.trim().equals("datefield")) {
DatePicker et = new DatePicker(mContext.getApplicationContext());
calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
et.init(year, month, day, null);
et.setLayoutParams(paramData);
et.setPadding(0, 0, 0, 0);
// et.setText("Dynamic EditText!");
// et.setBackgroundColor(Color.parseColor("#c7ecfc"));
ll.addView(et);
}
else {
EditText et = new EditText(mContext.getApplicationContext());
et.setLayoutParams(paramData);
et.setTextSize(6);
et.setPadding(0, 0, 0, 0);
//et.setText("Dynamic EditText!");
et.setBackgroundColor(Color.parseColor("#c7ecfc"));
ll.addView(et);
}
}
public void init() {
height_data= ll.getHeight();
width_data = ll.getWidth();
}
@Override
public int getItemCount() {
return myMap.size();
}
// Provide a reference to the views for each data item
// Complex data items may need more than one view per item, and
// you provide access to all the views for a data item in a view holder
public class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public ImageView thumbnail;
public TextView documentName;
LinearLayout fl_zoom_adapter;
public ViewHolder(View v) {
super(v);
ll=(AbsoluteLayout)v.findViewById(R.id.ll_image_tempplate) ;
ll.setVisibility(View.INVISIBLE);
ll.setVisibility(View.GONE);
thumbnail = (ImageView) v.findViewById(R.id.thumbnail);
documentName=(TextView)v.findViewById(R.id.txt_img_document_name_item);
fl_zoom_adapter=(LinearLayout)v.findViewById(R.id.fl_zoom_adapter);
ViewTemplate activity = (ViewTemplate) mContext;
ZoomLayout myZoomView = new ZoomLayout(activity);
// fl_zoom_adapter.addView(myZoomView);
}
public void bindData( ArrayList<TemplateFieldList> templateLists) {
ll.setVisibility(View.INVISIBLE);
ll.setVisibility(View.GONE);
}
}
}