2012-03-30 5 views
0

내 활동에 목록보기를 추가하려고합니다. 다음과 같은 상황이 발생합니다. 사용자가 단추를 클릭하면 asyncTask를 사용하여 인터넷에서 데이터를 가져옵니다. 그러면 해당 데이터가 목록보기에 추가됩니다. 데이터는 테이블에서 온라인으로 나오므로 테이블에 10 개의 행이 있고 Listview에 10 개의 값이 있어야합니다.ListView에 추가

  1. 하지만 몇 가지 문제가 있습니다. 먼저 listview를 기존 레이아웃에 추가하고 즉시 업데이트 할 수 있습니까?

  2. 목록보기는 setContentView() 메서드를 사용할 수없고 setListAdapter를 사용해야한다는 것을 의미합니까?

  3. 이미 배치 된 두 개의 버튼이있는 레이아웃이있는 경우 목록보기를 아래에 추가 할 수 있으며 setContentView() 메소드를 사용하여 구현할 수 있습니까?

감사

편집

업데이트 코드 - 작품 :

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

    ListView list = getListView(); 
    list.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values)); 
    list.setTextFilterEnabled(true); 
} 

XML 레이아웃

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

    <TableLayout 

android:layout_width = "fill_parent" 
android:layout_height = "wrap_content" 
    > 

    <TableRow 

android:layout_width = "fill_parent" 
android:layout_height = "wrap_content" 
android:layout_weight = "1" 
    > 

    <TextView 

android:id = "@+id/txtTitle" 
android:layout_width = "wrap_content" 
android:layout_height = "fill_parent" 
android:layout_weight = "1" 
android:gravity = "center" 
android:text = "ISS Predictions" 
android:textStyle="bold" 
android:textColor = "#FFFFFF" 
    /> 

    <Button 
android:id="@+id/reloadTen" 
android:layout_height="wrap_content" 
android:layout_width ="fill_parent" 
android:layout_gravity = "right" 
android:layout_weight = "1" 
android:text = "Reload" 
android:textColor = "#FFFFFF" 
android:textStyle = "bold" 
android:background = "#000000" 
/> 

    </TableRow> 

    </TableLayout> 

    <ListView 

android:id = "@+id/android:list" 
android:layout_width = "wrap_content" 
android:layout_height = "wrap_content" 
android:textSize = "15dp" 
android:textStyle = "bold" 

    /> 


</LinearLayout> 

답변

2

1) 예, 레이아웃에 ListView을 넣고 ListView으로 표시된 데이터를 업데이트 할 수 있습니다. 일반적으로 ArrayAdapter에서 상속받은 클래스를 만들어 기본 데이터와 ListView에 대한보기를 생성하는 간격을 연결합니다.

표시된 데이터를 업데이트하려면 어댑터에 add()notifyDataSetChanged()을 사용하십시오. 활동은 당신이 @android:id/list의 ID와 ListView 요소가ListActivity를 상속하는 경우에만

2) 아니요 setListAdapter()를 호출합니다. 다음은 이러한 요소의 예

<ListView android:id="@android:id/list" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1"/> 

당신은 여전히 ​​사용하기 원하는 XML 레이아웃에 전달하는 setContentView()를 사용합니다.

3) 예, 위에 설명 된 이유 때문입니다.

+0

나는 위의 두 대답 모두를 좋아하지만 하나를 골라야하므로이 코드를 가져옵니다. 고마워, 또 다른 사람이 같은 문제를 일으키는 경우에 대비하여 코드를 추가했습니다. – Katana24

1

모든 XML 레이아웃의 일부로 ListView를 만들 수 있습니다. 당신은 ListActivity를 확장 할 필요가 없다. (나는 당신이 생각을 얻는 곳이라고 생각한다.) 그러나 도움이 될 수있다.

ListActivity를 확장하지 않으면 이미 만든 레이아웃 (및 ListView 포함)의 ID 로ContentView를 설정할 수 있습니다.

1) 예, 기존 레이아웃에 레이아웃 뷰를 추가 할 수 있습니다 (LayoutInflater 인플레이션 또는 새 ListView (...)를 사용하여).

2) setContentView를 사용하여 목록 뷰 포함 여부에 관계없이 기존 레이아웃을 설정할 수 있습니다. 기존 목록 뷰가 포함되어 있으면 findViewById (R.id.myListLayoutId)를 말하고 XML에 포함해야합니다.

3) myExistingView.addView (listView, index)에 사용할 인덱스를 지정하여 기존 레이아웃 앞이나 뒤에 기존 레이아웃에 listview를 추가 할 수 있습니다.

어떤 경우 든 채울 데이터가 들어있는 목록 뷰에 어댑터를 만들거나 추가해야합니다. adapter.notifyDataSetChanged()를 호출하여 데이터 세트가 변경되었음을 어댑터에 알리는 한 언제든지 어댑터에 데이터를 추가 할 수 있습니다. 이로 인해 어댑터가 갱신 될 목록보기가 생성됩니다.