0

私のアクティビティには次のものがあります:

カスタム相対レイアウトである DrawView。

この RelativeLayout は、カスタム ナビゲーションバーとカスタム GridView に存在する必要があります。

カスタム NavigationBar は、ここで DrawView に追加されます。

final LayoutInflater factory = getLayoutInflater();
        final View textEntryView = factory.inflate(R.layout.multiplechoice, null);
        com.lernapp.src.Views.NavigationBarTest navigation = (com.lernapp.src.Views.NavigationBarTest)textEntryView.findViewById(R.id.navigationbar);
        RelativeLayout parent = (RelativeLayout)navigation.getParent();
        parent.removeAllViews();

        drawView.addView(navigation);

私はGridViewで似たようなことをしたかった..

わかりません、私の CustomGridView は常に null です。これはなぜですか!?

MyCustomGridView grid = (MyCustomGridView)findViewById(R.id.gridview);

xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  android:orientation="vertical"  
  android:layout_width="fill_parent"  
  android:layout_height="fill_parent">  

    <com.lernapp.src.Views.MyCustomGridView  
        android:id="@+id/gridview"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:cacheColorHint="#00000000"  
        android:listSelector="@android:color/transparent"  
        android:numColumns="auto_fit"  
        android:columnWidth="160dp"/>  
</LinearLayout>

CustomGridView:

public class MyCustomGridView extends GridView implements OnItemClickListener{  
      private Listener mListener;  

      public MyCustomGridView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        setOnItemClickListener(this);  
      }  

      public void onItemClick(AdapterView parent, View v, int position, long id) {  
        if (mListener != null) {  
          mListener.onClick(position);  
        }  
      }  

      public void setListener(Listener l){  
        mListener = l;  
      }  

      public interface Listener{  
        void onClick(int position);   
      }

    }  

編集:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int height = this.getWindowManager().getDefaultDisplay().getHeight();
    int width = this.getWindowManager().getDefaultDisplay().getWidth();

    MyCustomGridView grid = (MyCustomGridView)findViewById(R.id.gridview);

    DrawView drawView = new DrawView(this, dragFieldText, targetFieldText, height, width, grid);

    final LayoutInflater factory = getLayoutInflater();
    final View textEntryView = factory.inflate(R.layout.multiplechoice, null);
    com.lernapp.src.Views.NavigationBarTest navigation = (com.lernapp.src.Views.NavigationBarTest)textEntryView.findViewById(R.id.navigationbar);
    RelativeLayout parent = (RelativeLayout)navigation.getParent();
    parent.removeAllViews();

    drawView.addView(navigation);

    setContentView(drawView);       
}
4

3 に答える 3

2

2 つのオプションがあります

  1. あなたが使用しますfindViewById。探しているビューは、 を使用して「画面上」にある必要があります setContentView()。それを回避する方法は他にありません。それが関数のfindViewById目的です。
  2. setContentView()このビューをプログラムで設定したいが、何らかの理由で設定したい XML にないために使用できない場合は、ビューをインフレートして魔法をかけてから、好きなように使用できますsetContentView()。これを行う方法の例は簡単ですが、マニュアルといくつかのランダムな例を確認してください
于 2012-04-15T09:39:12.450 に答える