2012-09-03 20 views
0

我有一個包含很多項目的ScrollView。在它的底部添加一組來自另一個Activity的項目。我檢查從另一個活動輸入ArrayList,並應該添加適當數量的複選框到我的Activity與ScrollView。我想補充的項目與LinearLayout中的幫助,這樣的:在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; 

       } 
      }; 
} 

我知道,使用滾動型內部的ListView是不推薦,但我試圖用的LinearLayout我的目標,但它不好的工作 - 它不能正確更新。以適當的方式顯示的ListView我用這樣的一個類:

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); 

我所有的項目都顯示正常,我可以得到功能,我想要的。