2012-01-04 15 views
0

私はAPPを持っています、バンドルIDはcom.MYAPPです。次に、com.referenceという名前の新しいパッケージを作成し、その中にViewCacheファイル。 findViewById(R.id.text)と findViewById(R.id.image)でエラーが発生したため、com.MYAPP.Rをインポートしてエラーを取り除かなければなりませんでした。しかし、レイアウトフォルダの下に、私は= R.id.textとR.id.imageというIDを使用できる多くの.xmlレイアウトファイルがあります。 ViewCacheがどのxmlを使用したかを正確に知るためには、指定する特定のxmlを指定する必要があると考えました。私はcom.MYAPP.R.row_item.xmlをインポートする必要があると思った。複数のXMLレイアウトファイルの要素R.id. *の正しいIDを見つける

また、レイアウトフォルダの下にid.textとid.view.imageを使用するmainapp.xmlもあります。 しかし、import com.MYAPP.R.row_item.xmlを指定することはできません。

だから、インポートには何を指定する必要がありますか?私はimport com.MYAPP.Rは十分ではないと思う。いくつかの命名明確にする

package com.reference; 

import com.MYAPP.R; 

import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ViewCache { 

private View baseView; 
private TextView textView; 
private ImageView imageView; 

public ViewCache(View baseView) { 
    this.baseView = baseView; 
} 

public TextView getTextView() { 
    if (textView == null) { 
     textView = (TextView) baseView.findViewById(R.id.text); 
    } 
    return textView; 
} 

public ImageView getImageView() { 
    if (imageView == null) { 
     imageView = (ImageView) baseView.findViewById(R.id.image); 
    } 
    return imageView; 
} 

}

答えて

1

:あなたはバンドルID(com.MYAPP)を呼び出し、何が(マニフェストファイルで定義されている)アプリケーションパッケージです。

R.javaファイルには、リソースから生成されたすべてのIDが含まれています。それは<application-package>.Rにあります(したがってあなたの場合com.MYAPP.R)。複数のレイアウトファイルに同じidを定義すると、Rファイル内に単一のIDが生成されます。

findViewById(id)ビュー内で、指定されたIDを持つ子ビューが検索されます。すべてのレイアウトファイルでこのIDのビューを検索しません。

あなたは、例えば次のような場合:あなたの例では

public class MyActivity extends Activity { 
public void onCreate(Bundle b) { 
    super.onCreate(b); 
    this.setContentView(R.layout.myView); // you set the view here 
    TextView tv = (TextView) findViewById(R.id.text); // this looks in the layout myView for an item with id text 
} 
} 

findViewById(..)が​​内のid textとchildviewを探します。他のレイアウトではなく、textの要素が検索されるのは​​だけです。したがって、findViewById(..)の結果は、あなたがbaseViewに割り当てるものによって決まります。

関連する問題