2017-09-02 11 views
0

ボタンで簡単なグリッドビューを作成するにはどうすればよいですか?私は最も明白な解決策を試しましたが、うまくいきません。チュートリアルは本当に悪いです(私のために)、シンプルな解決策は機能しません。ボタンが付いたシンプルなグリッドビュー

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <GridView 
     android:id="@+id/gridView" 
     android:layout_width="match_parent" 
     android:layout_height="155.5dp" 
     android:numColumns="2" 
     android:padding="10dp" 
     android:layout_marginBottom="68.0dp" 
     android:background="#009967"> 
     <Button 
     android:text="Button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/button1" /> 
    </GridView> 

</LinearLayout> 

答えて

1

SpinnersGridViewsListViewsは、AndroidのAdapterViewsのサブクラスです。つまり、子要素がなく、BaseAdapterクラスを拡張するカスタムアダプターを使用してプログラムで動的に作成されます。

Android AdapterViews

必要に何をすべきか、最初の空のアクティビティを作成し、GridActivityという名前を付けます。 activity_grid.xmlレイアウトファイルを空のGridViewに編集します。 例 -

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.user.gridbuttonview.GridActivity" 
    android:columnWidth="90dp" 
    android:id="@+id/activity_grid" 
    android:gravity="center" 
    android:horizontalSpacing="10dp" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="10dp" /> 

その後ButtonAdapterなどという名前のプロジェクトに新しいクラスを作成するには、次の -

マインドをボタンの合計数は、デフォルトで20ある変数total_btnsに設定することができます。

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.Toast; 

public class ButtonAdapter extends BaseAdapter 
{ 
    private Context mContext; 
    private int btn_id; 
    private int total_btns = 20; 

    public ButtonAdapter(Context context) { 
     this.mContext = context; 
    } 

    @Override 
    public int getCount() { 
     return total_btns; 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(final int i, View view, ViewGroup viewGroup) 
    { 
     Button btn; 

     if (view == null) { 
      btn = new Button(mContext); 
      btn.setText("Button " + (++btn_id)); 
     } else { 
      btn = (Button) view; 
     } 

     btn.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Toast.makeText(v.getContext(), "Button #" + (i + 1), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     return btn; 
    } 
} 

最後に、あなたのGridActivityクラスの作成時にGridViewコントロールを設定するonCreate方法を変更します。

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

    GridView gridview = (GridView) findViewById(R.id.activity_grid); 
    gridview.setAdapter(new ButtonAdapter(this)); 
} 

ボタンを使用して、必要なグリッドビューを作成します。そして、あなたは、グリッド・アクティビティをトリガーするには、次の出力を得れば -

enter image description here

アダプタクラスでクリックリスナーが各クリックを処理するために編集することができます。それが役に立てば幸い!

関連する問題