0

こんにちは、これはスタックの最初の質問です。このチュートリアルの動的グリッドを作成してい ますhttp://www.stealthcopter.com/blog/2010/09/android-creating-a-custom-adapter-for-gridview-buttonadapter/comment-page-1/

今ではかなりうまく機能しています。私のレイアウトはgridViewで構成されており、このgridViewの下にTextViewがあります。

問題は、フォーカスが変更されたときに(グリッド要素で)各IDに異なる情報を表示するようにTextViewを変更したいということです。ButtonAdapter内でOnFocusChangeListenerを使用しようとしましたが、textViewへの参照を取得しようとすると、findViewByIdが実装されていないと表示されます。

動的グリッド要素を処理できるようにするために、メインアクティビティでどのように参照を作成するのか疑問に思います。onCreate()には次のものがあります。

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

だから私はここから私のグリッド要素を処理したいのですが、何かアイデアはありますか?ありがとう

編集:私はさまざまなことを変更しようとしていますが、getViewメソッドからNullPointerExceptionを受け取ります。私はそれを機能させる方法を見つけることができません、私は助けてくれる人に感謝します、これは私のコードです:

    public View getView(int position, View convertView, ViewGroup parent) {
    final Button btn;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        btn = new Button(mContext);
        btn.setLayoutParams(new GridView.LayoutParams(100, 55));
        btn.setPadding(8, 8, 8, 8);
    } else {
        btn = (Button) convertView;
    }

    btn.setText(filenames[position]);
    // filenames is an array of strings
    btn.setTextColor(Color.WHITE);
    btn.setId(position);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            TextView vt = (TextView) btn.findViewById(R.id.textView1);
            vt.setText("Button Pressed");
        }
    });

ありがとう。

4

1 に答える 1

0

あなたは正しい方向に進んでいると思いますが、アダプターでそれを処理するのが最も理にかなっていると思います。したがって、findViewById()は機能しませんが、convertView.findViewById()(またはアダプターのgetViewメソッドで返されるビュー)に変更すると機能します。そこから、TextViewを操作できるようになります。

于 2011-08-19T19:18:04.953 に答える