0

Google에서 사용하는 것과 같은 검색보기를 만들고 싶었습니다. 이를 위해 기본적으로 검색 막대와 화면의 위쪽 섹션에있는 버튼과 그 아래쪽에있는 ListView라는 XML 레이아웃을 만들었습니다.일반 활동 안드로이드에 정의 된 ListView의 내용을 표시합니다.

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

지금,이 활동의 ​​코드입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayoutSearch" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:background="#FF394952"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" > 
     <EditText android:layout_height="wrap_content" android:id="@+id/searchTextBar" android:layout_width="wrap_content" android:layout_weight="1"> 
      <requestFocus></requestFocus> 
     </EditText> 
     <Button android:layout_height="fill_parent" android:layout_width="wrap_content" android:id="@+id/searchButton" android:text="Buscar"></Button> 
    </LinearLayout> 

    <ListView 
     android:id="@+id/searchResultList" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:layout_alignParentBottom="true" 
     android:layout_weight="1.0" /> 

</LinearLayout> 

는 그리고 이것은 생성자에 ArrayAdapter와 요구하는 textViewResource의 코드입니다. 지금까지 콘텐트가 포함 된 뷰를 표시하려고합니다 (그 이유는 지금 정적 정적 배열을 사용하고있는 이유입니다).

public class SearchActivity extends Activity{ 

    static final String[] COUNTRIES = new String[] { 
     "Afghanistan", "Albania", "Algeria"}; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.searchview); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item, COUNTRIES); 
     ListView lv = (ListView)this.findViewById(R.id.searchResultList); 
     lv.setAdapter(adapter); 
     lv.setTextFilterEnabled(true); 

      lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
       // When clicked, show a toast with the TextView text 
       Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
        Toast.LENGTH_SHORT).show(); 
      } 
      }); 
    } 
} 

그러나 활동을 실행할 때 검색 막대가 표시되지만 ListView는 표시되지 않습니다.

SearchActivity의 확장자를 ListActivity로 변경하려고 시도했지만 프로그램을 시작하려고하면 프로그램이 중단됩니다. 나는 또한 Search Interface의 존재를 알고 있지만, 나는이 특별한 방법의 작동을보고 싶다.

왜 ListView의 내용이 표시되지 않습니까? 이 문제를 해결할 수있는 방법이 있습니까? 사전

답변

1

ListActivity를 사용하려면 ListActivity에 이미 ListView 인스턴스가 있음을 알아야합니다. 자신의 ListView를 인스턴스화하고 어댑터를 설정하는 대신 ListView에 대해 어댑터를 설정하려면 setListAdapter 메서드를 호출해야합니다. getListView를 호출하여 ListActvity의 ListView에 대한 핸들을 얻은 다음 그 위에 클릭 리스너를 설정할 수 있습니다.

+0

Michaelg : 답장을 보내 주셔서 감사합니다! ListActivity에 이미 ListView 인스턴스가 있음을 알고 있습니다. 그러나, 내가 만든 ListView에 어댑터를 리디렉션 할 수 있습니까? 왜냐하면 난 그냥 setContentView를 건너 뛰고 당신이 말하는 것을하면, 잘 작동하기 때문입니다. –

0

에서

덕분에 당신은 당신이 ID를 @android:id/list와 ListView가 있어야합니다 ListActivity을 확장합니다. ListActivity을 확장 할 때 충돌을 수정해야하는 ListView의 ID를 변경하십시오.

+0

ListActivity를 확장 할 때 확인했는데 현재 실제로 중단되지 않습니다. 그러나 나는 아직도 국가 목록에 텍스트를 볼 수 없다. 그러나 onCreate 메소드가 시작될 때 setContentView 행에 주석을 달면 목록이 잘 보일 수 있으므로 XML 파일 구성의 일부라고 생각됩니다. 어떻게 작동할까요? 어쨌든 도움을 주셔서 감사합니다! : D –

관련 문제