2013-03-02 89 views
1

努力實現添加按鈕結束GridView的動態

  • 添加按鈕的GridView其中有layout_height="wrap_parent" & layout_width="fill_parent"提供更好的UIX後。

約束:

  • 其從Facebook,圖形的API來的GridView其中包括的ImageView的進賬添加ImageViews。

  • 一旦圖像被抓取,在GridView的上方添加按鈕。

試過

  • 。將按鈕的可見性設置爲在AysncTask的onPostExecute()上可見,這有助於我獲取圖像的

  • 。在ScrollListener設置按鈕可見的可見性,如果它滾動達到GridView控件即最後圖像的結束裏面的GridView

  • 但是按鈕不是在GridView的結束表示這將運行。不知道爲什麼?

我的XML佈局::

<RelativeLayout 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" 
tools:context=".MainActivity" 
android:id="@+id/rootview" 
> 
<Button 
    android:id="@+id/fbconnect" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/connectfb" 
    android:layout_centerHorizontal="true" 
    android:visibility="visible" 
    /> 
<GridView 
    android:id="@+id/gridphoto" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:columnWidth="80dp" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="2dp" 
    android:horizontalSpacing="2dp" 
    android:stretchMode="columnWidth" 
    /> 
<Button 
     android:id="@+id/loadmore" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"   
     android:layout_centerHorizontal="true" 
     android:layout_below="@id/gridphoto" 
     android:visibility="gone" 
     android:text="@string/load_more" 
    /> 
</RelativeLayout> 

代碼::通過AysncTask和設置在能見度onPostExecute擷取圖片在GridView控件的末尾添加LoadMore按鈕。

protected void onPostExecute(Void result) { 
    loadMore.setVisibility(View.VISIBLE); // Load More Button 
} 

代碼::實現ScrollListener在GridView控件 - >檢測是否達到底部或者不那麼變化的負載更多按鈕的可見性。

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
if (gridView.getLastVisiblePosition() + 1 == increasingItem) // Checking if it reaches bottom of GridView or not. It prefectly runs. Checked via Logging into StackTrace. 
    { 
    loadMore.setVisibility(View.VISIBLE); // Load More Button 
    } 
} 

任何幫助將被讚賞!

回答

3

我通過它跑與此代碼:

MainActivity:

public class MainActivity extends Activity implements OnScrollListener { 




     ArrayAdapter<String> adapter; 

     GridView gridphoto; 
     Button loadMore; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      gridphoto = (GridView) findViewById(R.id.gridphoto); 
      loadMore = (Button) findViewById(R.id.loadmore); 
      gridphoto.setOnScrollListener(this); 
      adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
      for (int i = 0; i < 80; i++) { 
       adapter.add("dummy data " + i); 

      } 
      gridphoto.setAdapter(adapter); 

     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, 
       int visibleItemCount, int totalItemCount) { 
      if (gridphoto.getLastVisiblePosition() + 1 == 80) { 
       loadMore.setVisibility(View.VISIBLE); // Load More Button 
      } 
     } 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      // TODO Auto-generated method stub 

     } 
    } 

和activity_main.xml中

<RelativeLayout 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" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <GridView 
      android:id="@+id/gridphoto" 
      android:layout_width="fill_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:columnWidth="80dp" 
      android:gravity="center" 
      android:horizontalSpacing="2dp" 
      android:numColumns="auto_fit" 
      android:stretchMode="columnWidth" 
      android:verticalSpacing="2dp" /> 

     <Button 
      android:id="@+id/loadmore" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Load More" 
      android:visibility="gone" /> 
    </LinearLayout> 

</RelativeLayout> 

它像預期的,希望它會幫

+0

嘗試將我的'RootView'包裝到'LinearLayout'中。但是,當我的'GridView'適配器從webservices填充不會給我在'GridView'後添加'Button'的o/p。 – 2013-03-04 15:13:51

+0

我並不那麼清楚抱歉!不要包裝你的RootView,而只包裝你的GridView和Button。並支付給gridvie attibutes。你的原始代碼中的問題是,即使你設置高度爲wrap_content,如果你的Gridview內容太多,它會比它的父母高,你會更高可以通過向gridview添加一個項目並將按鈕的可見性設置爲可見來檢查此行爲。和合!在reuntime你會看到你的按鈕。 – HoodVinci 2013-03-04 16:35:06

+0

無論你提出的建議肯定會起作用。 但是,如果我有'GridView'方式的內容,然後父母?有沒有什麼辦法來解決這些?? – 2013-03-04 17:02:47