android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复
android Recyclable with absolute layout with dynamically created edit text repeated automatically in new row
我创建了一个回收视图,其中包含图像文档的图像文档列表。我已经创建了一些动态创建的编辑文本字段.. 当 运行 代码然后第 2 行编辑文本自动出现在第 7 行。我检查了第 7 行的日志:在日志中动态创建的编辑文本未调用..
我已经在绝对布局中创建了动态创建的编辑文本字段。所以我试图隐藏不包含树图值的绝对布局意味着数组列表大小为零。
树状图数据:值为动态创建的字段坐标数组列表。
<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);
}
}
}
日志中的 getParameter() 方法未调用第 7 行。
问题是行号的编辑文本也显示在第 7 行中,第 3 行的编辑文本也显示在第 8 行中。意味着旧的编辑文本在新行中重复。
请忽略下面一行
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
每次当项目视图可见时调用 BindView 取决于它是否被回收。因此每次调用 bindView 时,您的布局都会添加到 AbsoluteLayout ll 中。我建议您通过在 onBindview 上调用方法 ll.removeAllViews(); 来删除 ll 的所有视图,然后向该布局添加视图。
可能会解决您的问题。
我创建了一个回收视图,其中包含图像文档的图像文档列表。我已经创建了一些动态创建的编辑文本字段.. 当 运行 代码然后第 2 行编辑文本自动出现在第 7 行。我检查了第 7 行的日志:在日志中动态创建的编辑文本未调用..
我已经在绝对布局中创建了动态创建的编辑文本字段。所以我试图隐藏不包含树图值的绝对布局意味着数组列表大小为零。
树状图数据:值为动态创建的字段坐标数组列表。
<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);
}
}
}
日志中的 getParameter() 方法未调用第 7 行。 问题是行号的编辑文本也显示在第 7 行中,第 3 行的编辑文本也显示在第 8 行中。意味着旧的编辑文本在新行中重复。
请忽略下面一行 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复 row.android 可回收,具有绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。 android 可回收,绝对布局,动态创建的编辑文本在新行中自动重复。
每次当项目视图可见时调用 BindView 取决于它是否被回收。因此每次调用 bindView 时,您的布局都会添加到 AbsoluteLayout ll 中。我建议您通过在 onBindview 上调用方法 ll.removeAllViews(); 来删除 ll 的所有视图,然后向该布局添加视图。
可能会解决您的问题。