java - 具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复

标签 java android absolute

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

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

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

<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行还显示了行号的editext,第8行也显示了行号3的编辑文本。.意味着旧的编辑文本在新行中重复。

请忽略以下行
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android Recyclable,具有动态创建的编辑文本的绝对布局,可在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android Recyclable,具有动态创建的编辑文本的绝对布局,可在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android Recyclable,具有动态创建的编辑文本的绝对布局,可在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android Recyclable,具有动态创建的编辑文本的绝对布局,可在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android Recyclable,具有动态创建的编辑文本的绝对布局,可在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android Recyclable,具有动态创建的编辑文本的绝对布局,可在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。
具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复。

最佳答案

每当项目视图可见时,都会根据其是否回收来调用BindView。因此,每次调用bindView时,您的布局都会添加到AbsoluteLayout ll中。我建议您通过调用ll.removeAllViews();来删除ll的所有视图。在onBindview上,然后将视图添加到该布局。

可能会解决您的问题。

关于java - 具有绝对布局的android可回收,具有动态创建的编辑文本,并在新行中自动重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43040741/

相关文章:

android - 在 android 中创建 JSON 对象失败

html - 将绝对元素居中,直到没有 js 的范围

css - 损坏位置: absolute in safari

java - 处理 OpenCV 和 QuickTime 视频捕获的问题

java - 从 map 存储条目是否安全?它会导致内存泄漏吗?

java - 如何通过单击按钮打开 Whatsapp 组?

javascript - 使用 Jsoup Java 从 Wep Pages 获取数据

java - 将 Canvas 保存到位图然后保存位图

javascript - 在没有容器溢出的情况下更改绝对元素的位置

android - Android 中 "[Developer] Accented English"(zz-ZZ) 的用途是什么?