web-dev-qa-db-ja.com

すべてのグリッドビューアイテムの特定の要素にアクセスする方法

各アイテムに2つの要素があるグリッドビューがあります。1つ目は画像で、2つ目はタイトルです。タイトルはアプリケーションの起動時に表示されませんが、グリッドビューの外側にボタンがあります。それをクリックすると、アイテムのタイトルの表示を変更して表示したいのですが、グリッドビューで各アイテムの各タイトルにアクセスできないという問題があります。アクティビティの独立ボタンのonClickメソッドでタイトル(TextView)の表示を設定すると、グリッドビューの最初のアイテムの表示のみが変更されます。

このスケッチは私のインターフェースを表しているので、タイトルは最初は見えませんが、「SetVisibilityButton」をクリックすると、それらをVisibleに設定したいと思います。

    Image1    Image2      Image3
    Title1    Title2      Title3

    Image4    Image5      Image6
    Title4    Title5      Title6

    Image7    Image8      Image9
    Title7    Title8      Title9


    ----------------------------
    SetVisibilityButton
    ____________________________        

Oncreate()アクティビティでグリッドビューを設定しました:

    favorGrid = (GridView) findViewById(R.id.favorGrid);
    favorGrid.setAdapter(adapter);

私のImageAdapterクラスでは、これは私のgetView()メソッドです:

          @Override
       public View getView(int position, View convertView, ViewGroup parent) 
       {
          View MyView = convertView;

           /*we define the view that will display on the grid*/

             //Inflate the layout
             LayoutInflater li = getLayoutInflater();
             MyView = li.inflate(R.layout.favor_item, null);

             // Add The Text!!!
             TextView tv = (TextView)MyView.findViewById(R.id.title);
             tv.setText(mTitles[position]);

             // Add The Image!!!           
             ImageView iv = (ImageView)MyView.findViewById(R.id.favor_item_image);
             iv.setImageResource(mThumbIds[position]);
          return MyView;
       }

私の主な活動からタイトルのテキストビューを取得し、彼の可視性を設定するために、私は試しました:

    TextView title = (TextView) findViewById(R.id.title);
    title.setVisibility(View.VISIBLE);

そして試した:

     // gv is the gridview (R.id.gridview)
     TextView title = (TextView)gv.findViewById(R.id.title);
     title.setVisibility(View.VISIBLE);

そして試した:

      LinearLayout layout = (LinearLayout) findViewById(R.id.gridLayout);
      TextView title = (TextView)layout.findViewById(R.id.title);
      title.setVisibility(View.VISIBLE);

ただし、これらすべてのソリューションは、グリッドビューの最初の要素のみの可視性を設定します。

私はこの問題に多くの時間を費やしましたが、まだ解決策が見つかりません。誰かが私がそれを修正するのを手伝ってくれるでしょうか?事前に感謝します

10
Alaoui Ghita

これは簡単です:

GridView mGridView (Your object instance)

final int size = mGridView.getChildCount();
for(int i = 0; i < size; i++) {
  ViewGroup gridChild = (ViewGroup) mGridView.getChildAt(i);
  int childSize = gridChild.getChildCount();
  for(int k = 0; k < childSize; k++) {
    if( gridChild.getChildAt(k) instanceof TextView ) {
      gridChild.getChildAt(k).setVisibility(View.GONE);
    }
  }
}
28
Andreas

特定の位置のlistViewのビューを取得する正しい方法は、次の方法です。

View viewItem = list.getChildAt(position);
if (viewItem != null) {                 
   TextView text = (TextView) viewItem.findViewById(R.id.item);
}
4
SerSánGal