2017-12-18 28 views
1

私はListViewを持っていて、その中にはListViewがあります。私はImageButtonです。ユーザーがImageButtonをクリックすると、新しいアイテムが膨張しますが、新しいアイテムを追加するたびに、スクロールして追加されたアイテムを表示する必要があります。私は、そのスクロールが追加された後、自動的に最後のアイテムに移動するのを助ける必要があります。ベースアダプタからリストビューの一番下にスクロール

My 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

ほんの1つの方法があります。アクティビティにパブリックメソッドを作成して呼び出す – ADM

+0

私のベースアダプタのコンストラクタにlistviewを渡した後、あなたのコードを使用しましたが、動作しませんでした。 – 3iL

関連する問題