2017-07-27 95 views
0

我有一個Linearlayouts,一個ScrollView和一個按鈕,我無法弄清楚爲什麼當我以編程方式將一個複選框添加到Linearlayout,在視圖結束時,方法從滾動視圖從ScrollView Scrollto方法不工作,因爲它應該

scrollview.scrollto(0, ScrollView.FOCUS_DOWN); 

將不會集中添加的最後一項。

這裏的XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="100" 
    tools:context="com.eidotab.myapplication.MainActivity"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:orientation="vertical" 
     android:padding="10dp" 
     android:layout_weight="30"> 

     <ScrollView 
      android:id="@+id/scroll" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <LinearLayout 
       android:id="@+id/linear" 
       android:gravity="center" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"> 
      </LinearLayout> 

     </ScrollView> 

    </LinearLayout> 

    <Button 
     android:id="@+id/boton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="TEST"/> 

</LinearLayout> 

,並在這裏的java:

public class MainActivity extends AppCompatActivity { 

    ScrollView scrollView; 
    LinearLayout linearLayout; 
    Button button; 

    int num = -1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     scrollView = (ScrollView) findViewById(R.id.scroll); 
     linearLayout = (LinearLayout) findViewById(R.id.linear); 
     button = (Button) findViewById(R.id.boton); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       num++; 
       CheckBox checkBox = new CheckBox(getApplicationContext()); 
       checkBox.setText("TEST " + num); 
       checkBox.setTextColor(Color.BLACK); 
       linearLayout.addView(checkBox); 

       scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
      } 
     }); 
    } 
} 

林也addind的.rar程序,所以你只需要下載它,並嘗試它。我已經花了幾個小時,試圖使其工作..也試圖從LinearLayout得到具體的孩子與

y = Linearlayout.getchildat(N).getBottom(); 

一個d的作品類似於FOCUS_DOWN ...我永遠無法看到最後一個項目..只有最後一個項目。

在此先感謝您的幫助。

這裏是程序

https://www.dropbox.com/home/Public?preview=MyApplication.rar

回答

0

好一番研究後,試圖以編程方式進行滾動的時候好像有某種問題,我已經找到了解決方案,最好的工作狀態,以增加可運行在我的代碼中的onClick方法裏面,所以我說

scrollView.post(new Runnable() { 
       @Override 
       public void run() { 
        scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
       } 
      }); 

而最終的結果是

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       num++; 
       CheckBox checkBox = new CheckBox(getApplicationContext()); 
       checkBox.setText("TEST " + num); 
       checkBox.setTextColor(Color.BLACK); 
       linearLayout.addView(checkBox); 

       //scrollView.fullScroll(ScrollView.FOCUS_DOWN); 

       scrollView.post(new Runnable() { 
        @Override 
        public void run() { 
         scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
        } 
       }); 
      } 
     }); 

它現在工作完美,但說,我不認爲這是理想的解決方案。

相關問題