2013-06-26 2 views
0

볼 이미지가 있는지에 따라 달라지는 프로그래밍 방식으로 여러 이미지 뷰를 추가하고 싶었습니다. 그래서 이것을 ArrayAdapter 클래스 내부에서 시도했습니다. 여기에서 내가 뭘하는지 추가 이미지에 대한 URL이 존재 여부와 다음에 이러한 이미지를 보여주기 위해 이미지 뷰의 숫자를 생성 확인ArrayAdapter를 통해 listView 항목에 ImageView 추가하기

@Override 
public View getView(int position, View rowView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    HeaderHolder headerRow = null; 
    View hs = null; 
    if (position == 0) { 
     if (hs == null) { 
      LayoutInflater inflater = (LayoutInflater) getContext() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      rowView = inflater.inflate(R.layout.header, null); 
      LinearLayout linear =(LinearLayout) rowView.findViewById(R.id.headerlayout); 

      TextView main = (TextView) rowView.findViewById(R.id.headLine); 
      main.setText(appManager.getDetails().getTitle()); 
      // Log.d("display width ", "" + display.getWidth()); 

      // TextViewJustify.justifyText(main, display.getWidth() - 400f 
      //); 
      TextView pubDate = (TextView) rowView 
        .findViewById(R.id.pubdate); 
      pubDate.setText(appManager.getDetails().getPubDate()); 
      TextView detailsBody = (TextView) rowView 
        .findViewById(R.id.detailsBody); 

      detailsBody.setText(appManager.getDetails().getBody()); 
      // TextViewJustify.justifyText(detailsBody, display.getWidth() - 
      // 400f); 
      ImageView iv = (ImageView) rowView.findViewById(R.id.main); 
      String url = appManager.getDetails().getMainImageLink(); 
      if (url != null) { 

       loader.fetchDrawableOnThread(appManager.getDetails() 
         .getMainImageLink(), iv); 

      } 

      if (appManager.getDetails().images.size() > 0) { 


       for (int i = 0; i < appManager.getDetails().images.size(); i++) { 
        im[i]= new ImageView(context); 
        im[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
        im[i].setScaleType(ScaleType.FIT_XY); 
        linear.addView(im[i]); 
        loader.fetchDrawableOnThread(appManager.getDetails().images.get(i), im[i]); 
       } 
      } 



      ImageView play = (ImageView) rowView 
        .findViewById(R.id.videoYoutube); 
      if (appManager.getDetails().getVideos().size() > 0) { 
       play.setVisibility(View.VISIBLE); 
       play.setOnClickListener(new OnClickListener() { 

        public void onClick(View arg0) { 
         // TODO Auto-generated method stub 
         context.startActivity(new Intent(
           Intent.ACTION_VIEW, Uri.parse(appManager 
             .getDetails().getVideos().get(0)))); 
        } 
       }); 
      } 

      headerRow = new HeaderHolder(); 
      headerRow.headLine = main; 
      headerRow.pubDate = pubDate; 
      headerRow.main = iv; 
      headerRow.lin = linear; 
      headerRow.details_images = im ; 
      headerRow.playButton = play; 
      hs = rowView; 
      hs.setTag(headerRow); 
     } 


    } 

    else if (position >= 1) { 

     .............. 

    } 

    return rowView; 
} 

항상 im[i]= new ImageView(context);에서 나에게 오류를 제공 내가 왜 몰라!

ImageView [ ] im = new ImageView [ 3 ]; 
im[0] = new ImageView(context); //filling one element at a time 
temps[1] = ..; 
temps[2] = ..; 

또는 루프 사용

내 오류 로그

06-26 12:21:49.064: E/AndroidRuntime(2806): FATAL EXCEPTION: main 
    06-26 12:21:49.064: E/AndroidRuntime(2806): java.lang.NullPointerException 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at  com.nazzelha.youm7.DetailsAdapter.getView(DetailsAdapter.java:111) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.AbsListView.obtainView(AbsListView.java:2159) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.ListView.makeAndAddView(ListView.java:1831) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.ListView.fillDown(ListView.java:674) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.ListView.fillFromTop(ListView.java:735) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.ListView.layoutChildren(ListView.java:1652) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.AbsListView.onLayout(AbsListView.java:1994) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.View.layout(View.java:14008) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.View.layout(View.java:14008) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.View.layout(View.java:14008) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.View.layout(View.java:14008) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.View.layout(View.java:14008) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.Choreographer.doFrame(Choreographer.java:532) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.os.Handler.handleCallback(Handler.java:725) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.os.Handler.dispatchMessage(Handler.java:92) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.os.Looper.loop(Looper.java:137) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at android.app.ActivityThread.main(ActivityThread.java:5041) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at java.lang.reflect.Method.invokeNative(Native Method) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at java.lang.reflect.Method.invoke(Method.java:511) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    06-26 12:21:49.064: E/AndroidRuntime(2806): at dalvik.system.NativeStart.main(Native Method) 
+2

오류의 어떤 종류의 당신을 제공 목록에 거주하는 객체의 배열을 검색하는 데 사용될 수있다? 당신은 당신의 im 배열의 길이를 지정 했습니까? –

+0

logcat을 확인하고 오류를 알려주십시오. 컨텍스트 변수에 컨텍스트 값을 넣지 않아도 오류가 발생할 수 있습니다. 클래스 변수로 컨텍스트를 초기화합니다. 생성자에서 this put. context = context; 첫 번째 매개 변수가 – Android

+0

이라면 아무 문제없이 어댑터의 생성자에서 컨텍스트를 가져옵니다. – vezikon

답변

0

이것은 당신이 아마 수행해야합니다 귀하의 메신저 (이미지 뷰) 배열을 초기화하는 것을 잊었다 것을 의미한다 :

for(int imgNr = 0; imgNr < 3; imgNr++) 
{ 
     //fill one element at a time 
     im[imgNr] = new ImageView(context);  
} 

또는 초기화 및 채우기 개체 배열의 다른 알려진 된 메서드를 사용하십시오.

배열의 크기가 항상 Java로 고정되어 있기 때문에이 작업을 수행해야합니다. 일반적으로 배열을 사용하는 대신 List 또는 다른 대안의 구현을 사용합니다.이 경우에는 크기 정의가 필요하지 않습니다.

배열이 나중에 응용 프로그램에서 필요한 경우, toArray 방법은

관련 문제