볼 이미지가 있는지에 따라 달라지는 프로그래밍 방식으로 여러 이미지 뷰를 추가하고 싶었습니다. 그래서 이것을 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)
오류의 어떤 종류의 당신을 제공 목록에 거주하는 객체의 배열을 검색하는 데 사용될 수있다? 당신은 당신의 im 배열의 길이를 지정 했습니까? –
logcat을 확인하고 오류를 알려주십시오. 컨텍스트 변수에 컨텍스트 값을 넣지 않아도 오류가 발생할 수 있습니다. 클래스 변수로 컨텍스트를 초기화합니다. 생성자에서 this put. context = context; 첫 번째 매개 변수가 – Android
이라면 아무 문제없이 어댑터의 생성자에서 컨텍스트를 가져옵니다. – vezikon