2012-05-03 2 views
3

코드를 통해 다양한 레이아웃을 선형 레이아웃에 추가하고 싶습니다. 각 상대 레이아웃은 왼쪽의 이미지 뷰, 오른쪽의 텍스트 뷰 (정확히 중간) 및 오른쪽의 다른 이미지로 구성됩니다. 데이터베이스에서 읽은 데이터를 사용하여 추가해야합니다. relativelayout을 사용해야합니다. RL을 통해 이미지와 다른 청취자에 대해 청취자를 사용하고 싶기 때문입니다.프로그래밍 방식으로 RelativeLayout에 이미지 추가

각 relativelayout은 내가 XML에서 가지고있는 이런 것 같습니다.

<RelativeLayout 
    android:id="@+id/relativecanal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:src="@drawable/antena3" /> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="39dp" 
      android:layout_toRightOf="@+id/imageView1" 
      android:text="Large Text" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" 
      android:src="@drawable/star" /> 

    </RelativeLayout> 

은이 코드를 사용하고 :하지만 난 이미지의 addView()를 만드는 순간에서 NullPointerException이, 내가 텍스트 뷰를 추가하는 단지 시도 얻고 그것을 작동합니다.

try { 
    File sdcard = Environment.getExternalStorageDirectory(); 
    File file = new File(sdcard,archivoCanales); 
    LinearLayout layout = (LinearLayout) findViewById(R.id.channelslistlayout); 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    String line; 



    while ((line = br.readLine()) != null) { 



     RelativeLayout channel=new RelativeLayout(this); 
     channel.setBackgroundColor(2); 

     TextView channelName=new TextView(this); 
     channelName.setText(new String(line)); 

     ImageView image=(ImageView)findViewById(R.drawable.animalplanet); 


     LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.MATCH_PARENT, 
       LinearLayout.LayoutParams.WRAP_CONTENT 
    );  

    RelativeLayout.LayoutParams firstImageParams = new RelativeLayout.LayoutParams(
      android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 
      android.view.ViewGroup.LayoutParams.WRAP_CONTENT); 
      firstImageParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 


     RelativeLayout.LayoutParams secImageParams = new RelativeLayout.LayoutParams(
       android.view.ViewGroup.LayoutParams.WRAP_CONTENT,android.view.ViewGroup.LayoutParams.WRAP_CONTENT); 
       secImageParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 


     channel.addView(image,firstImageParams); 
     channel.addView(channelName,secImageParams); 

     layout.addView(channel,llp); 
} 

} 
catch (IOException e) { 
    e.printStackTrace(); 
} 

답변

5

(ImageView)findViewById(R.drawable.animalplanet)을 사용하고 있으며 프로그래밍 방식으로 afaik를 수행하는 적절한 방법이 아닙니다. 당신이 ImageView을 팽창하려면 다음과 같이해야합니다 :

RelativeLayout.LayoutParams imParams = 
new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
ImageView imSex = new ImageView(context); 
imSex.setImageResource(getmyImage()); 
imSex.setId(2); 
addView(imSex,imParams);  

을하지만, 당신은 단지 클릭 beeing는 내가 당신이 ViewBinder

+1

이미지를 사용하는 것이 좋습니다 데이터베이스에서로드하지 않고 이미지를 표시합니다. setImageResource (R.drawable.animalplanet); 그것을하는 올바른 방법이었다. 감사! – danywarner

+0

여기 addView() 메서드는 무엇입니까? 오류가 발생합니다. "메서드 addView (ImageView, LinearLayout.LayoutParams)가 AddPhotoActivity 유형에 대해 정의되지 않았습니다." – rams

+0

@venkataramana it 's relativeLayout.addView (imSex, imParams); 만약 당신이이 활동을 –

4

새 이미지를 만들지 않으므로 nullpointer 예외가 발생합니다. 새 레이아웃을 만들거나 레이아웃을 새로 고침해야합니다.

관련 문제