2012-09-03 5 views
0

많은 항목이 포함 된 ScrollView가 있습니다. 그 아래에 다른 Activity의 항목 세트를 추가합니다. 다른 Activity에서 입력 ArrayList를 확인하고 ScrollView를 사용하여 Activity에 적절한 체크 박스 수를 추가해야합니다.ScrollView 내 ListView에 대한 사용자 지정 시각화 만들기

public void addFiles() 
     { 

      adapter = new ArrayAdapter<File>(this, 
        R.layout.new_order, R.id.fileCheck, 
        FileManagerActivity.finalAttachFiles) 
        { 
       @Override 
       public View getView(final int position, View convertView, ViewGroup parent) { 
        // creates view 

        LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        View view = inflater.inflate(R.layout.file, null); 
        view.setFocusable(false); 
        CheckBox textView = (CheckBox) view 
          .findViewById(R.id.fileCheck); 
        textView.setClickable(true); 
        textView.setText(FileManagerActivity.finalAttachFiles.get(position).getName().toString()); 
        textView.setTextColor(Color.BLACK); 
        textView.setPadding(55, 0, 0, 0); 
        textView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.file_icon, 0, 0, 0); 
        textView.setTextSize(16); 
        textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); 
        int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f); 
        textView.setCompoundDrawablePadding(dp5); 
        textView.setOnClickListener(new OnClickListener() { 

         public void onClick(View v) { 


          if(((CheckBox)v).isChecked()){ 
           checks.set(position, 1); 
          } 
          else{ 
          checks.set(position, 0); 
          } 

         } 
        }); 
        return view; 

       } 
      }; 
} 

내가 안에있는 ScrollView의 ListView를 사용하여 사용하지 않는 것이 좋습니다 것을 알고 있지만 나는 나의 목표를 위해있는 LinearLayout을 사용하려고하지만 나쁜 일 - 제대로 업데이트하지 못했습니다 : 나는 그런있는 LinearLayout의 도움으로 항목을 추가 .

public class UtilityListView { 
    public static void setListViewHeightBasedOnChildren(ListView listView) { 
     ListAdapter listAdapter = listView.getAdapter(); 
     if (listAdapter == null) { 
      // pre-condition 
      return; 
     } 

     int totalHeight = 0; 
     int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); 
     Log.i("ListAdapter count",Integer.toString(listAdapter.getCount())); 
     for (int i = 0; i < listAdapter.getCount(); i++) { 

      View listItem = listAdapter.getView(i, null, listView); 
      listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
      totalHeight += listItem.getMeasuredHeight(); 
     } 

     ViewGroup.LayoutParams params = listView.getLayoutParams(); 
     params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
     listView.setLayoutParams(params); 
     listView.requestLayout(); 
    } 
} 

그리고 모든 데이터가 그런 식으로 변경 후 사용 : 나는 이러한 클래스를 사용하여 적절한 방법으로 목록보기 표시하려면

fileList = (ListView) findViewById(R.id.fileListView); 
    fileList.setAdapter(adapter); 
    UtilityListView.setListViewHeightBasedOnChildren(fileList); 

그러나 ListView에의 높이의 아이템의 수량보다 훨씬 더 큰 목록 ... 어떻게 해결할 수 있습니까?

답변

0

나는 꼬리말과 머리말을 가진 ListView를 사용하여 문제를 해결했다. ScrollView 내에서 ListView를 사용하려는 모든 시도는 실행 불가능하거나 불충분했습니다. 나는 이것을 다음과 같이했다 :

View header = getLayoutInflater().inflate(R.layout.header_listview, null); 
    View footer = getLayoutInflater().inflate(R.layout.footer_listview, null); 
    fileList.addHeaderView(header); 
    fileList.addFooterView(footer); 
    fileList.setCacheColorHint(Color.WHITE); 
    fileList.setAdapter(adapter); 

내 모든 항목이 올바르게 보여주고 기능을 얻을 수있다.

관련 문제