2014-03-05 3 views
-2

나는 5 개의 textviews로 goal_item.xml을 만들었습니다.ListView에 문자열 배열을 추가하는 방법

나는 목표가 거의 공백이다. ListView를 채 웁니다.

public class Goal extends Activity { 

    ListView lvgoal; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTitle("Цели"); 
     setContentView(R.layout.goal); 
     lvgoal= (ListView) findViewById(R.id.lv_goal); 
    } 

goal.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

     <ListView 
     android:id="@+id/lv_goal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</LinearLayout> 

그리고리스트 뷰의 textviews을 채우기 위해 5 개 문자열 배열이 있습니다

문자열 [] 이름, 금액, 회원, 날짜, ID를.

어떻게 ListView에 5를 채울 수 있습니까?

+1

필드가 어떤 클래스의 하나 개의 어레이 (하는 theClass)를 사용 ... 문자열의 5 개 배열을 사용하지 않는 이름, 합계, 회원, 날짜 , id 다음 ArrayAdapter를 사용하십시오. Selvin

+2

ListView가 어떻게 작동하는지 튜토리얼 ([this] (http://www.vogella.com/tutorials/AndroidListView/article.html)과 같은)을 통해 가십시오. – Emmanuel

답변

2

자신의 어댑터를 구현해야합니다. 먼저 5 개의 텍스트 뷰를 사용하여 새 레이아웃을 만듭니다. (example.xml) 그런 다음 어댑터 클래스를 구현하십시오.

class Data { 
    public String name; 
    public String sum; 
    public String member; 
    public String date; 
    public String id; 
} 

과 같은 독특한 배열에 데이터를 저장 : 5 개 배열이 관련된 경우

, 난 당신이 다음을 수행하는 것이 좋습니다

Data[] data = new Data[x]; 
data[0] = new Data(); //you have naturally to initialize each element :) 
data[0].name = "abc"; 
data[0].sum = "100"; 
//...etc... 

만들 간단합니다 어댑터.

class MyAdapter extends ArrayAdapter<Data> { 
    public MyAdapter(Context context, int textViewResourceId, Data[] objects) { 
     super(context, textViewResourceId, objects); 
    } 
    public MyAdapter(Context context, int textViewResourceId, List<Data> objects) { 
     super(context, textViewResourceId, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.example, null); 
     TextView t1 = (TextView)convertView.findViewById(R.id.t1); 
     TextView t2 = (TextView)convertView.findViewById(R.id.t2); 
     TextView t3 = (TextView)convertView.findViewById(R.id.t3); 
     TextView t4 = (TextView)convertView.findViewById(R.id.t4); 
     TextView t5 = (TextView)convertView.findViewById(R.id.t5); 
     Data d = getItem(position); 
     t1.setText(d.name); 
     t2.setText(d.sum); 
     t3.setText(d.member); 
     t4.setText(d.date); 
     t5.setText(d.id); 

     return convertView; 
    } 

} 

는 그런 다음 목록보기를 채울 수 있습니다

Data[] data; 
ListView list = (ListView)findViewById(R.id.lv_goal); 
//... 
MyAdapter adapter = new MyAdapter(context, R.layout.example,data); 
list.setAdapter(adapter); 
+0

안녕하세요. 나는 네가 말한 것처럼 그것을했다. 데이터 대신 Data_goal 클래스를 만들었지 만 문자열 이름, 문자열 ID 등은 모두 동일합니다. 그런 다음이 클래스에서 초기화합니다. Data_goal [] datee = new Data_goal [1]; 그리고 내가 datee [0] .name = "abc"와 같이 그것을 채우려고 할 때; 그것은 나에게 NullPOinterException을 준다. 내가 datee.name = 'abc'라는 레코드 하나를 다시 만들었을 때. 무슨 일이 일어날 지 아십니까? 고맙습니다. – anindis

+1

글쎄, 나는 datee [0] = new Data_goal()을 추가했습니다. 그리고 그것은 일했다 :) – anindis

+0

당신은 대답했다 :) 나는 대답을 쓰고 있었다! 댓글 주셔서 감사합니다. 나는 즉시 다른 사람들이이 실수를 저 지르지 않도록 내 대답을 바로 잡는다. – gior91

1

먼저 행보기와 별도의 XML 파일을 만들어야합니다.

그러면 배열을 전달할 어댑터를 직접 작성해야합니다.

자세한 내용은 in this tutorial을 참조하십시오.

관련 문제