수색…


소개

ListView는 배열 또는 데이터베이스와 같은 데이터 소스의 여러 항목을 그룹화하고 스크롤 가능 목록에 표시하는 뷰 그룹입니다. 데이터는 Adapter 클래스를 사용하여 listview에 바인딩됩니다.

비고

ListView 는 스크롤 가능한 항목의 목록을 표시하는보기 그룹입니다.
목록 항목은 배열 또는 데이터베이스 쿼리와 같은 소스에서 컨텐트를 가져오고 각 항목 결과를 목록에있는보기로 변환하는 Adapter 를 사용하여 목록에 자동으로 삽입됩니다.

레이아웃의 내용이 동적이거나 미리 결정되지 않은 경우, 런타임에 View로 레이아웃을 채우기 위해 AdapterView 를 서브 클래스하는 레이아웃을 사용할 수 있습니다. AdapterView 클래스의 서브 클래스는, Adapter 를 사용해 레이아웃에 데이터를 바인드합니다.

ListView 를 사용하기 전에 RecyclerView 예제도 확인해야합니다.

CursorAdapter를 사용한 필터링

// Get the reference to your ListView
ListView listResults = (ListView) findViewById(R.id.listResults);

// Set its adapter
listResults.setAdapter(adapter);

// Enable filtering in ListView
listResults.setTextFilterEnabled(true);

// Prepare your adapter for filtering    
adapter.setFilterQueryProvider(new FilterQueryProvider() {
    @Override
    public Cursor runQuery(CharSequence constraint) {

        // in real life, do something more secure than concatenation
        // but it will depend on your schema
        // This is the query that will run on filtering
        String query = "SELECT _ID as _id, name FROM MYTABLE "
                       + "where name like '%" + constraint + "%' "
                       + "ORDER BY NAME ASC";
        return db.rawQuery(query, null);
     }
});

사용자가 EditText 입력 할 때마다 쿼리가 실행 EditText 가정 해 보겠습니다.

    EditText queryText = (EditText) findViewById(R.id.textQuery);
    queryText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {

        }

        @Override
        public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
            // This is the filter in action
            adapter.getFilter().filter(s.toString());
            // Don't forget to notify the adapter
            adapter.notifyDataSetChanged();
        }

        @Override
        public void afterTextChanged(final Editable s) {

        }
    });

사용자 정의 ArrayAdapter

기본적 으로 ArrayAdapter 클래스는 각 항목의 toString() 을 호출하고 내용을 TextView에 배치하여 각 배열 항목에 대한보기를 만듭니다.

각 항목에 대한 복잡한보기를 만들려면 (예를 들어 각 배열 항목에 ImageView를 사용하려는 경우) ArrayAdapter 클래스를 확장하고 getView() 메서드를 재정 의하여 각 항목에 대해 원하는보기 유형을 반환합니다.

예 :

public class MyAdapter extends ArrayAdapter<YourClassData>{

    private LayoutInflater inflater;

    public MyAdapter (Context context, List<YourClassData> data){
        super(context, 0, data);
        inflater = LayoutInflater.from(context);
    }

    @Override
    public long getItemId(int position)
    {
        //It is just an example
        YourClassData data = (YourClassData) getItem(position);
        return data.ID;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent)
    {
        ViewHolder viewHolder;
        if (view == null) {
            view = inflater.inflate(R.layout.custom_row_layout_design, null);
            // Do some initialization
        
            //Retrieve the view on the item layout and set the value.
            viewHolder = new ViewHolder(view);
            view.setTag(viewHolder);
         }
         else {
             viewHolder = (ViewHolder) view.getTag();
         }
         
        //Retrieve your object    
        YourClassData data = (YourClassData) getItem(position);
       
        viewHolder.txt.setTypeface(m_Font);    
        viewHolder.txt.setText(data.text);              
        viewHolder.img.setImageBitmap(BitmapFactory.decodeFile(data.imageAddr));
        
        return view;
    
    }

    private class ViewHolder
    {
         private final TextView txt;
         private final ImageView img;

         private ViewHolder(View view) 
         {
             txt = (TextView) view.findViewById(R.id.txt);
             img = (ImageView) view.findViewById(R.id.img);
         }
    }
}

ArrayAdapter를 사용한 기본 ListView

기본적으로 ArrayAdapter 는 각 항목의 toString() 을 호출하고 내용을 TextView 에 배치하여 각 배열 항목에 대한보기를 만듭니다.

예:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, myStringArray);

여기서 android.R.layout.simple_list_item_1 은 배열의 각 문자열에 대한 TextView 를 포함하는 레이아웃입니다.

그런 다음 ListView 에서 setAdapter() 를 호출하면 ListView .

ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

예를 들어, ImageViews와 같은 배열 표시를 위해 TextViews 이외의 것을 사용하거나 toString() 결과 이외의 일부 데이터가 뷰를 채우려면 getView(int, View, ViewGroup) 를 재정 의하여 원하는 유형의보기를 반환하십시오. 이 예제를 확인하십시오 .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow