Java android可循环使用,绝对布局,动态创建的编辑文本在新行中自动重复

Java android可循环使用,绝对布局,动态创建的编辑文本在新行中自动重复,java,android,absolute,Java,Android,Absolute,我创建了一个循环视图,其中包含图像文档的图像文档列表。我已经创建了一些动态创建的编辑文本字段。。运行代码时,第二行编辑文本将自动显示在第七行。我已经检查了第7行的日志:在动态创建的日志中,编辑文本未调用 我在绝对布局中创建了动态编辑文本字段。所以我试图隐藏绝对布局,它不包含树映射的值意味着数组列表大小为零 树形图数据:值是动态创建字段坐标的数组列表。 适配器类: 公共类TemplateImageAdapter扩展了RecyclerView.Adapter/*实现了View.OnTouchLi

我创建了一个循环视图,其中包含图像文档的图像文档列表。我已经创建了一些动态创建的编辑文本字段。。运行代码时,第二行编辑文本将自动显示在第七行。我已经检查了第7行的日志:在动态创建的日志中,编辑文本未调用

我在绝对布局中创建了动态编辑文本字段。所以我试图隐藏绝对布局,它不包含树映射的值意味着数组列表大小为零

树形图数据:值是动态创建字段坐标的数组列表。


适配器类:
公共类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);

        }
    }
}