2014-05-12 2 views
0

방금 ​​Android를 배우기 시작했으며 아래에 설명 된 질문을하고 싶지만 시작할 방법이 확실하지 않습니다.Android - 이미지와 텍스트가 포함 된 목록보기

나는 다음과 같은 데이터와 데이터의 배열,

1, text1, image1.png 
2, text2, image2.png 
3, text3, null 
4, null, image3.png 

내가 몇 가지 튜토리얼 다음 자신의 XML 레이아웃과 함께 ArrayAdapter와와의 ListView를 만드는 방법을 알고 있습니다.

위의 배열에서 볼 수 있듯이 때때로 이미지가 포함되지 않고 때로는 텍스트가 포함되지 않으며 때로는 둘 다 포함됩니다.

제 질문은 레이아웃을 사용하여 레이아웃 값에 따라 동적으로 변경되도록 레이아웃을 만드는 방법입니다.

다른 말로하면 배열보기에 이미지가있는 경우에만 imageview를 볼 수있는 listview + ArrayAdapter + 레이아웃을 작성하는 방법을 생각해 볼 수 있습니다. 텍스트 만있을 때 textview를보고 두 가지 모두를 볼 수 있습니다. 둘 다 사용할 수 있습니다.

튜토리얼에 대한 링크가

+0

난 당신이 데이터의 내용에/쇼 당신의 ListView 항목 레이아웃에 텍스트 뷰와 이미지 뷰를 넣어 숨기려고한다고 생각. –

답변

1

하나의 배열 요소를 나타내는 MyCustomType을 만들 수 있습니다 (귀하의 경우에는 숫자, 텍스트 및 이미지를 보유하고 있습니다). 또한 사용자 정의 배열 어댑터를 구현해야합니다. 이 어댑터는 MyCustomType의 ArrayList를 사용합니다.

public class CustomAdapter extends ArrayAdapter<MyCustomType> { 

//... 

private ArrayList<MyCustomType> foo; 

public CustomAdapter(Context context, Activity bar, ArrayList<MyCustomType> foo) { 
    super(bar, R.layout.row, foo); 

    this.foo = foo; 
    mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

재정 getViewTypeCount()는 당신이 행 얼마나 많은 다른 종류를 결정합니다. getItemViewType은 표시해야 할 행의 종류를 반환합니다.

귀하의 getView 방법은 자신의 일에 비슷한 수 :

public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 
    int type = getItemViewType(position); // decide what row type has to be displayed 

    if (convertView == null) {    
     convertView = mInflater.inflate(R.layout.row, parent, false); 

     viewHolder = new ViewHolder(); 
     viewHolder.number = //... 
     viewHolder.text = //... 
     viewHolder.image = //... 

     convertView.setTag(viewHolder); 
    } 
    else { 
     viewHolder = (ViewHolder) convertView.getTag(); // avoided to call findViewById 
    } 


    switch(type) { 
    case TYPE1: 
     //... you could just change the visibility of the corresponding view 
     break; 
    case TYPE 2: 
     // ... 
     break; 
    } 

    return convertView; 
} 
0

내 조언은 사용자 정의 배열 어댑터를 사용하는 것입니다 매우 도움이 될 것입니다. 좋은 자습서 here가 있습니다.

공식 문서는 here입니다.

기본적으로 ArrayAdapter 클래스를 확장하는 클래스를 만듭니다. 오버라이드 (override)를 구현해, getView 메소드로 특정의 뷰를 표시하는지, 표시하지 않게 처리합니다. 이 메서드는 전달 된 목록의 각 항목에 대해 실행됩니다.

+0

고마워, 나는 그 부분을 알고, 나는 텍스트가 없을 때만 이미지를 표시하거나 이미지가 없을 때만 텍스트를 표시하는 방법이 아니라는 것을 안다. –

관련 문제