ff와 비슷한 프로젝트를 만들어야합니다. 사진. (siily 그림을 사용하는 것에 대한 나의 사과, 나는 즉시 이용할 수있는 것과 함께해야한다).
왼쪽의 ImageView가있는 다중 라인 ListView
나는 내가 '동적'의 ListView를 만드는 가장 좋은 방법이었다 무슨 짓을했는지 언급하지 않았다하지만 난 현재 일이 무엇을 만들 다행 것. 다음과 같이 어쨌든 내 구현은 다음과 같습니다
public class MultiLineListViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<SearchResults> searchResults = getSearchResults();
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new MyCustomBaseAdapter(this, searchResults));
}
private ArrayList<SearchResults> getSearchResults() {
ArrayList<SearchResults> results = new ArrayList<SearchResults>();
SearchResults sr1 = new SearchResults();
sr1.setName("Name 1");
sr1.setPhone("12345");
SearchResults.setIcon(R.drawable.pic_one);
results.add(sr1);
sr1 = new SearchResults();
sr1.setName("Name 2");
sr1.setPhone("123456");
SearchResults.setIcon(R.drawable.pic_two);
results.add(sr1);
...
return results;
}
}
공용 클래스의 SearchResult {
private String name;
private String phone;
public static ArrayList<Integer> iconsList = new ArrayList<Integer>();
public void setName(String name) {
this.name = name;
}
public void setPhone(String phone) {
this.phone = phone;
}
public static void setIcon(int i) {
iconsList.add(i);
}
public String getName() {
return this.name;
}
public String getPhone() {
return this.phone;
}
}
public class MyCustomBaseAdapter extends BaseAdapter {
private ArrayList<SearchResults> searchArrayList;
private LayoutInflater layoutInflater;
private Context context;
public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
this.searchArrayList = results;
//this.context = context;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return searchArrayList.size();
}
@Override
public Object getItem(int position) {
return searchArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
ImageView imageView;
if(convertView == null) {
convertView = layoutInflater.inflate(R.layout.custom_row_view, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.name);
holder.txtPhone = (TextView) convertView.findViewById(R.id.phone);
imageView = new ImageView(context);
convertView.setTag(holder);
}
else {
//imageView = (ImageView) convertView;
holder = (ViewHolder) convertView.getTag();
}
imageView = new ImageView(context);
imageView.setImageResource(SearchResults.iconsList.get(position));
holder.txtName.setText(searchArrayList.get(position).getName());
holder.txtPhone.setText(searchArrayList.get(position).getPhone());
return convertView;
}
class ViewHolder {
TextView txtName;
TextView txtPhone;
}
위의 코드는 이름을 표시에서 성공을 및 Phone ListView에있는 전화, 그것은 'Force Close'를주는 이미지를 추가 한 것입니다.
주석 처리 된 라인을 메모하십시오. imageView = (ImageView) convertView; 댓글을 삭제하면 앱이 다운되는 점에서 특정 라인까지 줄였습니다.
귀하의 제안이 현장에있었습니다! 예를 들어, layout.custom_row_view.xml에 ImageView를 추가하고 getView() 내에서 imageView의 모든 선언과 인스턴스를 제거했다면 중첩 된 LinearLayouts (RelativeLayout도 마찬가지 임)를 사용하여 예제와 유사한 뷰를 정렬했습니다. ! 그것은 고의로 지금 고의로 일하고있다, 감사합니다! –