2017-12-18 72 views
1

我有一個ListView並在那裏ListView我有一個ImageButton。當用戶點擊ImageButton時,一個新的項目會被誇大,但每次添加一個新項目時,我都必須向下滾動才能看到添加的項目。我需要幫助才能在添加後自動移動到最後一個項目。從底座適配器滾動到列表視圖的底部

請注意,我的ImageButton是在一個不同的佈局(但它是列表視圖的一部分),並且相同的佈局有一個LinearLayout作爲我充氣的子視圖的父視圖。

這是我的xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relativeLayoutOther" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/_5sdp"> 

    <TextView 
     android:id="@+id/objectiveOtherCheckBox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add Other Objectives" 
     android:layout_marginStart="@dimen/_10sdp" 
     android:layout_marginTop="@dimen/_10sdp" 
     android:textColor="@color/common_google_signin_btn_text_light_focused" 
     android:textSize="@dimen/_12ssp" /> 

    <ImageButton 
     android:id="@+id/addOtherObjectiveTextBox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/objectiveOtherCheckBox" 
     android:layout_marginLeft="@dimen/_10sdp" 
     android:layout_marginTop="@dimen/_10sdp" 
     android:background="@drawable/round_button2" 
     android:src="@android:drawable/ic_input_add"/> 
//parent layout 
    <LinearLayout 
     android:id="@+id/otherObjLinearLayout" 
     android:layout_width="wrap_content" 
     android:layout_marginTop="@dimen/_15sdp" 
     android:layout_marginLeft="@dimen/_10sdp" 
     android:layout_below="@+id/objectiveOtherCheckBox" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"/> 

</RelativeLayout> 

這是我的基本適配器內部的代碼膨脹子視圖。在這個功能中,我想在添加一個項目後將ListView滾動到底部。

ImageButton imageButton = (ImageButton) convertView.findViewById(R.id.addOtherObjectiveTextBox); 
       imageButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         //Toast.makeText(v.getContext(), "Clicked123", Toast.LENGTH_SHORT).show(); 
         final Dialog dialog = new Dialog(v.getContext()); 
         dialog.setContentView(R.layout.otherobjectivedialog); 

         final EditText enterObjET = (EditText) dialog.findViewById(R.id.enterObjEditText); 
         Button closeEnterObjBtn = (Button) dialog.findViewById(R.id.closeEnterObjDialog); 
         Button objConfirmBtn = (Button) dialog.findViewById(R.id.enterObjConfirmBtn); 

         closeEnterObjBtn.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           dialog.dismiss(); 
          } 
         }); 

         objConfirmBtn.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(final View v) { 
           final String enteredObj = enterObjET.getText().toString(); 
           if(enteredObj.equals("")){ 
            Toast.makeText(v.getContext(), "Please write a objective", Toast.LENGTH_LONG).show(); 
           }else { 

            final View editChildView = layoutInflater.inflate(R.layout.other_objective_edittext, null); 
            editParentLL.addView(editChildView); 

            final TextView tvOO = editChildView.findViewById(R.id.otherobjTextView); 
            ImageView ivOOEdit = editChildView.findViewById(R.id.otherobjEdit); 
            ImageView ivOODelete = editChildView.findViewById(R.id.otherobjDelete); 
            tvOO.setText(enteredObj); 
            ivOODelete.setOnClickListener(new View.OnClickListener() { 
             @Override 
             public void onClick(View view) { 
              int posValue2 = editParentLL.indexOfChild(editChildView); 
              editParentLL.removeView(editChildView); 
              otherObjList.remove(posValue2); 
             } 
            }); 
            ivOOEdit.setOnClickListener(new View.OnClickListener() { 
             @Override 
             public void onClick(View view) { 
              int editPosValue = editParentLL.indexOfChild(editChildView); 
              final Dialog dialog2 = new Dialog(con); 
              dialog2.setContentView(R.layout.otherobjectivedialog); 

              final EditText enterObjET2 = (EditText) dialog2.findViewById(R.id.enterObjEditText); 
              Button closeEnterObjBtn2 = (Button) dialog2.findViewById(R.id.closeEnterObjDialog); 
              Button objConfirmBtn2 = (Button) dialog2.findViewById(R.id.enterObjConfirmBtn); 
              String otherObjectiveTextToEdit = otherObjList.get(editPosValue); 
              enterObjET2.setText(otherObjectiveTextToEdit); 

              closeEnterObjBtn2.setOnClickListener(new View.OnClickListener() { 
               @Override 
               public void onClick(View v) { 
                dialog2.dismiss(); 
               } 
              }); 
              objConfirmBtn2.setOnClickListener(new View.OnClickListener() { 
               @Override 
               public void onClick(View view) { 
                int editPosValue2 = editParentLL.indexOfChild(editChildView); 
                final String enteredObj2 = enterObjET2.getText().toString(); 
                if(enteredObj2.equals("")){ 
                 Toast.makeText(con, "Please write a objective", Toast.LENGTH_LONG).show(); 
                }else { 
                 dialog2.dismiss(); 
                 tvOO.setText(enteredObj2); 
                 otherObjList.put(editPosValue2, enteredObj2); 

                } 
               } 
              }); 
              dialog2.show(); 
             } 
            }); 
            //objectiveOtherET.setText(objectiveOtherET.getText().toString()+ " \n" + enteredObj); 
            //Log.i("POS", "onClick: "+editParentLL.indexOfChild(editChildView)); 
            otherObjList.put(oo, enteredObj); 
            oo++; 
            dialog.dismiss(); 
           } 
          } 
         }); 

         dialog.show(); 

/*       LinearLayout linearLayoutNew = new LinearLayout(con); 
          linearLayoutNew.setOrientation(LinearLayout.VERTICAL); 
          et = new EditText(con); 
          LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
          et.setLayoutParams(p); 
          et.setHint("Set some objective"); 
          linearLayoutNew.addView(et); 
          ll.addView(linearLayoutNew);*/ 
        } 

回答

1

通知列表更改後,您需要調用ListView上的滾動。

list_View.smoothScrollToPosition(list_View.getChildCount()); 

或者如果從非UI線程調用。

list_View.post(new Runnable() { 
      @Override 
      public void run() { 
       list_View.smoothScrollToPosition(list_View.getChildCount()); 
      } 
     }); 
+0

如何從我的基礎適配器訪問ListView? – 3iL

+0

那只是一種方法。在活動中創建一個公共方法並調用它。 – ADM

+0

我將listview傳遞給了我的基礎適配器中的構造函數,然後我使用了你的代碼,但它沒有工作。 – 3iL