2014-10-14 2 views
0

이것은 내 MainActivity입니다.사용자 지정 ListView with Image

public class MainActivity extends Activity implements OnItemClickListener { 


public static final String[] titles = new String[] { "Strawberry", 
     "Banana", "Orange", "Mixed" }; 

public static final String[] descriptions = new String[] { 
     "It is an aggregate accessory fruit", 
     "It is the largest herbaceous flowering plant", "Citrus Fruit", 
     "Mixed Fruits" }; 

public static final int[] image = { R.drawable.a_1, R.drawable.a_2, 
     R.drawable.a_3, R.drawable.a_4 }; 

public ListView listView; 
List<RowItem> rowItems; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    rowItems = new ArrayList<RowItem>(); 
    for (int i = 0; i < titles.length; i++) { 
     RowItem item = new RowItem(image[i], titles[i], descriptions[i]); 
     rowItems.add(item); 
    } 

    listView = (ListView) findViewById(R.id.list); 
    customeBaseAdapter adapter = new customeBaseAdapter(this, rowItems); 
    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(this); 
} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
    // TODO Auto-generated method stub 
} 
} 

이 내 CustomAdapter

public class customeBaseAdapter extends BaseAdapter { 


Context context; 
List<RowItem> rowItems; 

public customeBaseAdapter(Context context, List<RowItem> items) { 
    // TODO Auto-generated constructor stub 

    this.context = context; 
    this.rowItems = items; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return 4; 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return rowItems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(int position, View view, ViewGroup group) { 
    // TODO Auto-generated method stub 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (view == null) { 
     view = inflater.inflate(R.layout.list_item, null); 
    } 

    ImageView imageView = (ImageView) view.findViewById(R.id.image); 
    TextView titleTextView = (TextView) view.findViewById(R.id.title); 
    TextView desc = (TextView) view.findViewById(R.id.desc); 
    imageView.setImageResource(rowItems.get(position).getImageId()); 
    titleTextView.setText(rowItems.get(position).getTitle()); 
    desc.setText(rowItems.get(position).getDesc()); 
    return view; 
} 
} 

이 내 RowItem 클래스입니다

package com.example.customlistview; 

import android.R.integer; 

public class RowItem { 

private int imageId; 
private String title; 
private String desc; 

public RowItem(int imageId, String title, String desc) { 
    this.imageId = imageId; 
    this.title = title; 
    this.desc = desc; 
} 

public int getImageId() { 
    return imageId; 
} 

public void setImageId(int imageId) { 
    this.imageId = imageId; 
} 

public String getDesc() { 
    return desc; 
} 

public void setDesc(String desc) { 
    this.desc = desc; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

@Override 
public String toString() { 
    return title + "\n" + desc; 
} 
} 

로그 캣 오류입니다.

10-15 01:04:05.135: E/AndroidRuntime(9901): FATAL EXCEPTION: main 
10-15 01:04:05.135: E/AndroidRuntime(9901): java.lang.NullPointerException 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at com.example.customlistview.customeBaseAdapter.getView(customeBaseAdapter.java:56) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.widget.AbsListView.obtainView(AbsListView.java:2350) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1409) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.widget.ListView.onMeasure(ListView.java:1273) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.view.View.measure(View.java:15286) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.view.View.measure(View.java:15286) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
10-15 01:04:05.135: E/AndroidRuntime(9901):  at android.view.View.measure(View.java:15286) 

내 맞춤 어댑터 클래스에서 나는 어떤 일이 있었는지 모릅니다. 너무 많이 시도했지만 해결 방법을 모릅니다.

+0

강조 또는 'customBaseAdapter'에서 선 (56)이 무엇인지 언급 해주십시오. – Setu

+0

imageView.setImageResource (rowItems.get (position) .getImageId()); 이 라인 맨. @ Setu –

+0

내 대답 (스타일)을 사용해 보셨습니까? 정말 그 imageview, textview 아래에 imageview 줄을 밀어 한 번 더 테스트하고 nullpointer 예외가 여전히 56 줄에 있으면 다음 myt 맞을 것입니다 .. – Elltz

답변

0

나는 코드를 테스트하기 위해 집에 아니지만, 다른 응용 프로그램을 시도하려는 경우 나는대로

Lazy load of images in ListView

0

했다 매우 잘

https://github.com/thest1/LazyList

여기에서하고있다 오류 자체가 설명하면 의 getView에 문제가 있습니다. 다음 변경을 수행해야한다고 생각합니다.

if (view == null) { 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.list_item, group, false); 
} 

희망이 있습니다.

+0

아니요 작동하지 않습니다. @ waqaslam –

+0

여전히 같은 예외입니까? – waqaslam

+0

아니요 이제 NullPointExapption입니다. @waqaslam –

0

변경 getView 아래 코드에 표시된대로 ViewHolder 클래스를 추가하십시오.

@Override 
public View getView(int position, View convertView, ViewGroup group) { 
    // TODO Auto-generated method stub 
    ViewHolder holder = null; 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.list_item, null); 
     holder = new ViewHolder(); 
     holder.txtDesc = (TextView) convertView.findViewById(R.id.desc); 
     holder.txtTitle = (TextView) convertView.findViewById(R.id.title); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.icon); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    RowItem rowItem = (RowItem) getItem(position); 
    holder.txtDesc.setText(rowItem.getDesc()); 
    holder.txtTitle.setText(rowItem.getTitle()); 
    holder.imageView.setImageResource(rowItem.getImageId()); 

    return convertView; 
} 

`

당신이 그것을 추가하지 않고 목록보기 행에 액세스하는

private class ViewHolder { ImageView imageView; TextView txtTitle; TextView txtDesc; }

.

Android Official Doc for ListView

및 전체 코드에 대한

Read Here

+0

코드와 코드의 차이점은 무엇입니까? @ Rahul Mandaliya –

+0

처음 내 코드가 도움이 될까요? –

+0

나중에 직장 상사. –

관련 문제