2017-12-18 69 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