Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用异步任务阻塞UI填充listview并长时间加载_Android_Listview_Android Asynctask_Adapter - Fatal编程技术网

Android 使用异步任务阻塞UI填充listview并长时间加载

Android 使用异步任务阻塞UI填充listview并长时间加载,android,listview,android-asynctask,adapter,Android,Listview,Android Asynctask,Adapter,我的问题是: 我有一个片段,其中一个文本视图用于搜索查询,一个按钮用于启动搜索,一个列表视图用于显示结果。 我还使用2个自定义适配器,因为我有2种搜索模式。 当我按下Search按钮时,asynctask应该开始工作并填充listview 问题:AsyncTask冻结了主线程:O 问题:填充的listview中的滚动速度非常慢 我想这是适配器的问题……知道吗 片段类: public class GesetzeFragment extends SherlockFragment { private

我的问题是:

我有一个片段,其中一个文本视图用于搜索查询,一个按钮用于启动搜索,一个列表视图用于显示结果。 我还使用2个自定义适配器,因为我有2种搜索模式。 当我按下Search按钮时,asynctask应该开始工作并填充listview

  • 问题:AsyncTask冻结了主线程:O
  • 问题:填充的listview中的滚动速度非常慢
  • 我想这是适配器的问题……知道吗

    片段类:

    public class GesetzeFragment extends SherlockFragment {
    
    private GesetzeFragment local;
    
    EditText etSuchText;
    ImageButton ibSuchen;
    ListView lvResults;
    ToggleButton tbModus;
    
    private boolean paragraphenModus = false;
    
    ArrayList<Gesetz> gesetzeItems = null;
    ArrayList<Paragraph> paragraphItems = null;
    
    GesetzeAdapter gesetzeAdapter = null;
    ParagraphenAdapter paragraphAdapter = null;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    
        this.local = this;
    
        View v = inflater.inflate(R.layout.fragment_gesetze, container, false);
    
        tbModus = (ToggleButton) v.findViewById(R.id.toggleButton_modus);
        tbModus.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton btn, boolean checked) {
                paragraphenModus = checked;
            }
        });
    
        etSuchText = (EditText) v.findViewById(R.id.editText_search_query);
    
        ibSuchen = (ImageButton) v.findViewById(R.id.imageButton_search);
        ibSuchen.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                onSearchAction(v);
            }
        });
    
        // Zeige zuerst 50 Gesetze
        lvResults = (ListView) v.findViewById(R.id.listView_search_results);
    
        lvResults.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
    
                // TODO: Paragraphenansicht öffnen
                Gesetz gesetz = (Gesetz) parent.getItemAtPosition(position);
    
            }
    
        });
    
        gesetzeItems = new ArrayList<Gesetz>();
        paragraphItems = new ArrayList<Paragraph>();
    
        paragraphAdapter = new ParagraphenAdapter(local.getActivity(),
                R.layout.paragraph_list_item, paragraphItems);
        gesetzeAdapter = new GesetzeAdapter(local.getActivity(),
                R.layout.gesetz_list_item, gesetzeItems);
    
        return v;
    }
    
    private void onSearchAction(View v) {
        lvResults.setAdapter(paragraphAdapter);
    
        LoadParagraphenTask task = new LoadParagraphenTask();
        task.execute(etSuchText.getText().toString(), 10);
    }
    
    private class LoadParagraphenTask extends
            AsyncTask<Object, Object, ArrayList<Paragraph>> {
        private final ProgressDialog dialog = new ProgressDialog(
                local.getActivity());
    
        @Override
        protected void onPreExecute() {
    
            dialog.setMessage("Suche...");
            dialog.show();
    
            super.onPreExecute();
        }
    
        @Override
        protected ArrayList<Paragraph> doInBackground(Object... params) {
            paragraphItems.clear();
            paragraphItems.addAll(Global.mGesetze.getParagraphen(
                    (String) params[0], (Integer) params[1]));
            return paragraphItems;
        }
    
        @Override
        protected void onPostExecute(ArrayList<Paragraph> results) {
            paragraphAdapter.notifyDataSetChanged();
    
            dialog.dismiss();
    
            super.onPostExecute(results);
        }
    
    }
    
    private class LoadGesetzeTask extends
            AsyncTask<Object, Object, ArrayList<Gesetz>> {
    
        private final ProgressDialog dialog = new ProgressDialog(
                local.getActivity());
    
        @Override
        protected void onPreExecute() {
    
            dialog.setMessage("Suche...");
            dialog.show();
    
            super.onPreExecute();
        }
    
        @Override
        protected ArrayList<Gesetz> doInBackground(Object... params) {
            gesetzeItems.clear();
            gesetzeItems.addAll(Global.mGesetze.getGesetze((String) params[0],
                    (Integer) params[1]));
            return gesetzeItems;
        }
    
        @Override
        protected void onPostExecute(ArrayList<Gesetz> results) {
            gesetzeAdapter.notifyDataSetChanged();
    
            dialog.dismiss();
    
            super.onPostExecute(results);
        }
    
    }
    
    public static GesetzeFragment newInstance(int info) {
        GesetzeFragment f = new GesetzeFragment();
    
        Bundle args = new Bundle();
        args.putInt("Info", info);
        f.setArguments(args);
    
        return f;
    }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:orientation="vertical" >
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:orientation="vertical" >
    
        <ToggleButton
            android:id="@+id/toggleButton_modus"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textOff="Gesetze"
            android:textOn="Paragraphen" />
    
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent" >
    
        <EditText
            android:id="@+id/editText_search_query"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:ems="10"
            android:imeOptions="actionDone"
            android:inputType="text"
            android:singleLine="true" >
    
            <requestFocus />
        </EditText>
    
        <ImageButton
            android:id="@+id/imageButton_search"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:contentDescription="@+id/imageButton_search"
            android:scaleType="center"
            android:src="@drawable/ic_action_search_dark" />
    </LinearLayout>
    
    <ListView
        android:id="@+id/listView_search_results"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:clickable="true" >
    
    </ListView>
    
    public class ParagraphenAdapter extends ArrayAdapter<Paragraph>{
    
    Context mContext;
    int layoutResourceId;
    ArrayList<Paragraph> items = null;
    
    public ParagraphenAdapter(Context context, int textViewResourceId, ArrayList<Paragraph> objects) {
        super(context, textViewResourceId, objects);
    
        this.mContext = context;
        this.layoutResourceId = textViewResourceId;
        this.items = objects;
    
    }
    
    public ArrayList<Paragraph> getItems() {
        return items;
    }
    
    public void setItems(ArrayList<Paragraph> items) {
        this.items = items;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewsHolder mHolder = null;
        Paragraph item = items.get(position);
    
        if (convertView == null) // Wird zum ersten Mal gelanden...
        {
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            convertView = inflater.inflate(R.layout.paragraph_list_item, parent, false);
    
            mHolder = new ViewsHolder();
            mHolder.tvGesetzTitelShort = (TextView) convertView.findViewById(R.id.textView_gesetz_titel);
            mHolder.tvParagraphTitle = (TextView) convertView.findViewById(R.id.textView_paragraph_titel);
            mHolder.tvTextPreview = (TextView) convertView.findViewById(R.id.textView_preview_text);
            mHolder.btnFavorite = (ImageButton) convertView.findViewById(R.id.imageButton_favorite);
    
            convertView.setTag(mHolder);
    
        } else {
            mHolder = (ViewsHolder) convertView.getTag();
        }
    
        mHolder.tvGesetzTitelShort.setText(item.getGesetz().getNameShort());
        mHolder.tvParagraphTitle.setText(item.getParagraph());
    
        Spanned spannedContent = Html.fromHtml(item.getText());
        mHolder.tvTextPreview.setText(spannedContent, BufferType.SPANNABLE);
    
        return convertView;
    
    }
    
    static class ViewsHolder {
        TextView tvGesetzTitelShort;
        TextView tvParagraphTitle;
        TextView tvTextPreview;
        ImageButton btnFavorite;
    }
    
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:orientation="vertical" >
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#D8D8D8" >
    
        <ImageButton
            android:id="@+id/imageButton_favorite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:focusable="false"
            android:src="@android:drawable/btn_star_big_off" />
    
        <TextView
            android:id="@+id/textView_gesetz_titel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerHorizontal="false"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/imageButton_favorite"
            android:background="@android:color/transparent"
            android:padding="5dp"
            android:text="AO"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
    </RelativeLayout>
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffF2F2F2" >
    
        <TextView
            android:id="@+id/textView_paragraph_titel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:background="@android:color/transparent"
            android:maxLines="1"
            android:padding="5dp"
            android:text="§ 1"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    
    </RelativeLayout>
    
    <TextView
        android:id="@+id/textView_preview_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:maxLines="3"
        android:padding="5dp"
        android:text="Bla bla Bla bla Bla bla Bla bla Bla bBla bla Bla bla Bla bla Bla bla Bla bla la Bla bla Bla bla Bla bla Bla bla " />
    
    public类GesetzeFragment扩展了SherlockFragment{
    私人GesetzeFragment本地;
    编辑文本等;
    图像按钮ibSuchen;
    列表查看结果;
    切换按钮tbModus;
    私有布尔段落modus=false;
    ArrayList gesetzeItems=null;
    ArrayList paragraphItems=null;
    GesetzeAdapter GesetzeAdapter=null;
    paragraphEnableAdapter paragraphAdapter=null;
    @凌驾
    创建视图上的公共视图(布局、充气机、视图组容器、,
    Bundle savedInstanceState){
    this.local=这个;
    视图v=充气机。充气(R.layout.fragment_gesetze,容器,假);
    tbModus=(ToggleButton)v.findViewById(R.id.ToggleButton_modus);
    setOnCheckedChangeListener(新的OnCheckedChangeListener(){
    @凌驾
    检查更改后的公共无效(复合按钮btn,布尔值已选中){
    段落模式=已检查;
    }
    });
    etSuchText=(EditText)v.findViewById(R.id.EditText\u search\u query);
    ibSuchen=(ImageButton)v.findViewById(R.id.ImageButton\u search);
    setOnClickListener(新的OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    研究(五);
    }
    });
    //Zeige zuerst 50 Gesetze
    lvResults=(ListView)v.findViewById(R.id.ListView\u搜索结果);
    lvResults.setOnItemClickListener(新的OnItemClickListener(){
    @凌驾
    public void onItemClick(AdapterView父级、视图、,
    内部位置,长id){
    //待办事项:段落
    Gesetz Gesetz=(Gesetz)parent.getItemAtPosition(position);
    }
    });
    gesetzeItems=newarraylist();
    paragraphItems=新的ArrayList();
    paragraphAdapter=新建ParagraphEnableAdapter(local.getActivity(),
    R.布局。段落(列表项、段落项);
    gesetzeAdapter=新的gesetzeAdapter(local.getActivity(),
    R.layout.gesetz_列表_项,gesetzeItems);
    返回v;
    }
    搜索上的私有无效(视图v){
    lvResults.setAdapter(段落适配器);
    LoadParagraphenTask任务=新建LoadParagraphenTask();
    执行(etSuchText.getText().toString(),10);
    }
    私有类LoadParagraphenTask扩展
    异步任务{
    private final ProgressDialog dialog=新建ProgressDialog(
    local.getActivity());
    @凌驾
    受保护的void onPreExecute(){
    设置消息(“Suche…”);
    dialog.show();
    super.onPreExecute();
    }
    @凌驾
    受保护的ArrayList doInBackground(对象…参数){
    段落项。清除();
    paragraphItems.addAll(Global.mGesetze.getParagraphen(
    (字符串)参数[0],(整数)参数[1]);
    返回段落项目;
    }
    @凌驾
    受保护的void onPostExecute(ArrayList结果){
    paragraphAdapter.notifyDataSetChanged();
    dialog.dismise();
    super.onPostExecute(结果);
    }
    }
    私有类LoadGesetzeTask扩展
    异步任务{
    private final ProgressDialog dialog=新建ProgressDialog(
    local.getActivity());
    @凌驾
    受保护的void onPreExecute(){
    设置消息(“Suche…”);
    dialog.show();
    super.onPreExecute();
    }
    @凌驾
    受保护的ArrayList doInBackground(对象…参数){
    gesetzeItems.clear();
    gesetzeItems.addAll(Global.mGesetze.getGesetze((字符串)参数[0],
    (整数)参数[1]);
    返回gesetzeItems;
    }
    @凌驾
    受保护的void onPostExecute(ArrayList结果){
    gesetzeAdapter.notifyDataSetChanged();
    dialog.dismise();
    super.onPostExecute(结果);
    }
    }
    公共静态GesetzeFragment newInstance(int info){
    GesetzeFragment f=新的GesetzeFragment();
    Bundle args=新Bundle();
    参数putInt(“信息”,信息);
    f、 设置参数(args);
    返回f;
    }
    }
    
    Xml文件:

    public class GesetzeFragment extends SherlockFragment {
    
    private GesetzeFragment local;
    
    EditText etSuchText;
    ImageButton ibSuchen;
    ListView lvResults;
    ToggleButton tbModus;
    
    private boolean paragraphenModus = false;
    
    ArrayList<Gesetz> gesetzeItems = null;
    ArrayList<Paragraph> paragraphItems = null;
    
    GesetzeAdapter gesetzeAdapter = null;
    ParagraphenAdapter paragraphAdapter = null;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    
        this.local = this;
    
        View v = inflater.inflate(R.layout.fragment_gesetze, container, false);
    
        tbModus = (ToggleButton) v.findViewById(R.id.toggleButton_modus);
        tbModus.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton btn, boolean checked) {
                paragraphenModus = checked;
            }
        });
    
        etSuchText = (EditText) v.findViewById(R.id.editText_search_query);
    
        ibSuchen = (ImageButton) v.findViewById(R.id.imageButton_search);
        ibSuchen.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                onSearchAction(v);
            }
        });
    
        // Zeige zuerst 50 Gesetze
        lvResults = (ListView) v.findViewById(R.id.listView_search_results);
    
        lvResults.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
    
                // TODO: Paragraphenansicht öffnen
                Gesetz gesetz = (Gesetz) parent.getItemAtPosition(position);
    
            }
    
        });
    
        gesetzeItems = new ArrayList<Gesetz>();
        paragraphItems = new ArrayList<Paragraph>();
    
        paragraphAdapter = new ParagraphenAdapter(local.getActivity(),
                R.layout.paragraph_list_item, paragraphItems);
        gesetzeAdapter = new GesetzeAdapter(local.getActivity(),
                R.layout.gesetz_list_item, gesetzeItems);
    
        return v;
    }
    
    private void onSearchAction(View v) {
        lvResults.setAdapter(paragraphAdapter);
    
        LoadParagraphenTask task = new LoadParagraphenTask();
        task.execute(etSuchText.getText().toString(), 10);
    }
    
    private class LoadParagraphenTask extends
            AsyncTask<Object, Object, ArrayList<Paragraph>> {
        private final ProgressDialog dialog = new ProgressDialog(
                local.getActivity());
    
        @Override
        protected void onPreExecute() {
    
            dialog.setMessage("Suche...");
            dialog.show();
    
            super.onPreExecute();
        }
    
        @Override
        protected ArrayList<Paragraph> doInBackground(Object... params) {
            paragraphItems.clear();
            paragraphItems.addAll(Global.mGesetze.getParagraphen(
                    (String) params[0], (Integer) params[1]));
            return paragraphItems;
        }
    
        @Override
        protected void onPostExecute(ArrayList<Paragraph> results) {
            paragraphAdapter.notifyDataSetChanged();
    
            dialog.dismiss();
    
            super.onPostExecute(results);
        }
    
    }
    
    private class LoadGesetzeTask extends
            AsyncTask<Object, Object, ArrayList<Gesetz>> {
    
        private final ProgressDialog dialog = new ProgressDialog(
                local.getActivity());
    
        @Override
        protected void onPreExecute() {
    
            dialog.setMessage("Suche...");
            dialog.show();
    
            super.onPreExecute();
        }
    
        @Override
        protected ArrayList<Gesetz> doInBackground(Object... params) {
            gesetzeItems.clear();
            gesetzeItems.addAll(Global.mGesetze.getGesetze((String) params[0],
                    (Integer) params[1]));
            return gesetzeItems;
        }
    
        @Override
        protected void onPostExecute(ArrayList<Gesetz> results) {
            gesetzeAdapter.notifyDataSetChanged();
    
            dialog.dismiss();
    
            super.onPostExecute(results);
        }
    
    }
    
    public static GesetzeFragment newInstance(int info) {
        GesetzeFragment f = new GesetzeFragment();
    
        Bundle args = new Bundle();
        args.putInt("Info", info);
        f.setArguments(args);
    
        return f;
    }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:orientation="vertical" >
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:orientation="vertical" >
    
        <ToggleButton
            android:id="@+id/toggleButton_modus"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textOff="Gesetze"
            android:textOn="Paragraphen" />
    
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent" >
    
        <EditText
            android:id="@+id/editText_search_query"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:ems="10"
            android:imeOptions="actionDone"
            android:inputType="text"
            android:singleLine="true" >
    
            <requestFocus />
        </EditText>
    
        <ImageButton
            android:id="@+id/imageButton_search"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:contentDescription="@+id/imageButton_search"
            android:scaleType="center"
            android:src="@drawable/ic_action_search_dark" />
    </LinearLayout>
    
    <ListView
        android:id="@+id/listView_search_results"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:clickable="true" >
    
    </ListView>
    
    public class ParagraphenAdapter extends ArrayAdapter<Paragraph>{
    
    Context mContext;
    int layoutResourceId;
    ArrayList<Paragraph> items = null;
    
    public ParagraphenAdapter(Context context, int textViewResourceId, ArrayList<Paragraph> objects) {
        super(context, textViewResourceId, objects);
    
        this.mContext = context;
        this.layoutResourceId = textViewResourceId;
        this.items = objects;
    
    }
    
    public ArrayList<Paragraph> getItems() {
        return items;
    }
    
    public void setItems(ArrayList<Paragraph> items) {
        this.items = items;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewsHolder mHolder = null;
        Paragraph item = items.get(position);
    
        if (convertView == null) // Wird zum ersten Mal gelanden...
        {
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            convertView = inflater.inflate(R.layout.paragraph_list_item, parent, false);
    
            mHolder = new ViewsHolder();
            mHolder.tvGesetzTitelShort = (TextView) convertView.findViewById(R.id.textView_gesetz_titel);
            mHolder.tvParagraphTitle = (TextView) convertView.findViewById(R.id.textView_paragraph_titel);
            mHolder.tvTextPreview = (TextView) convertView.findViewById(R.id.textView_preview_text);
            mHolder.btnFavorite = (ImageButton) convertView.findViewById(R.id.imageButton_favorite);
    
            convertView.setTag(mHolder);
    
        } else {
            mHolder = (ViewsHolder) convertView.getTag();
        }
    
        mHolder.tvGesetzTitelShort.setText(item.getGesetz().getNameShort());
        mHolder.tvParagraphTitle.setText(item.getParagraph());
    
        Spanned spannedContent = Html.fromHtml(item.getText());
        mHolder.tvTextPreview.setText(spannedContent, BufferType.SPANNABLE);
    
        return convertView;
    
    }
    
    static class ViewsHolder {
        TextView tvGesetzTitelShort;
        TextView tvParagraphTitle;
        TextView tvTextPreview;
        ImageButton btnFavorite;
    }
    
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:orientation="vertical" >
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#D8D8D8" >
    
        <ImageButton
            android:id="@+id/imageButton_favorite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:focusable="false"
            android:src="@android:drawable/btn_star_big_off" />
    
        <TextView
            android:id="@+id/textView_gesetz_titel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerHorizontal="false"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/imageButton_favorite"
            android:background="@android:color/transparent"
            android:padding="5dp"
            android:text="AO"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
    </RelativeLayout>
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffF2F2F2" >
    
        <TextView
            android:id="@+id/textView_paragraph_titel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:background="@android:color/transparent"
            android:maxLines="1"
            android:padding="5dp"
            android:text="§ 1"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    
    </RelativeLayout>
    
    <TextView
        android:id="@+id/textView_preview_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:maxLines="3"
        android:padding="5dp"
        android:text="Bla bla Bla bla Bla bla Bla bla Bla bBla bla Bla bla Bla bla Bla bla Bla bla la Bla bla Bla bla Bla bla Bla bla " />
    
    
    

    两个适配器之一:

    public class GesetzeFragment extends SherlockFragment {
    
    private GesetzeFragment local;
    
    EditText etSuchText;
    ImageButton ibSuchen;
    ListView lvResults;
    ToggleButton tbModus;
    
    private boolean paragraphenModus = false;
    
    ArrayList<Gesetz> gesetzeItems = null;
    ArrayList<Paragraph> paragraphItems = null;
    
    GesetzeAdapter gesetzeAdapter = null;
    ParagraphenAdapter paragraphAdapter = null;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    
        this.local = this;
    
        View v = inflater.inflate(R.layout.fragment_gesetze, container, false);
    
        tbModus = (ToggleButton) v.findViewById(R.id.toggleButton_modus);
        tbModus.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton btn, boolean checked) {
                paragraphenModus = checked;
            }
        });
    
        etSuchText = (EditText) v.findViewById(R.id.editText_search_query);
    
        ibSuchen = (ImageButton) v.findViewById(R.id.imageButton_search);
        ibSuchen.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                onSearchAction(v);
            }
        });
    
        // Zeige zuerst 50 Gesetze
        lvResults = (ListView) v.findViewById(R.id.listView_search_results);
    
        lvResults.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
    
                // TODO: Paragraphenansicht öffnen
                Gesetz gesetz = (Gesetz) parent.getItemAtPosition(position);
    
            }
    
        });
    
        gesetzeItems = new ArrayList<Gesetz>();
        paragraphItems = new ArrayList<Paragraph>();
    
        paragraphAdapter = new ParagraphenAdapter(local.getActivity(),
                R.layout.paragraph_list_item, paragraphItems);
        gesetzeAdapter = new GesetzeAdapter(local.getActivity(),
                R.layout.gesetz_list_item, gesetzeItems);
    
        return v;
    }
    
    private void onSearchAction(View v) {
        lvResults.setAdapter(paragraphAdapter);
    
        LoadParagraphenTask task = new LoadParagraphenTask();
        task.execute(etSuchText.getText().toString(), 10);
    }
    
    private class LoadParagraphenTask extends
            AsyncTask<Object, Object, ArrayList<Paragraph>> {
        private final ProgressDialog dialog = new ProgressDialog(
                local.getActivity());
    
        @Override
        protected void onPreExecute() {
    
            dialog.setMessage("Suche...");
            dialog.show();
    
            super.onPreExecute();
        }
    
        @Override
        protected ArrayList<Paragraph> doInBackground(Object... params) {
            paragraphItems.clear();
            paragraphItems.addAll(Global.mGesetze.getParagraphen(
                    (String) params[0], (Integer) params[1]));
            return paragraphItems;
        }
    
        @Override
        protected void onPostExecute(ArrayList<Paragraph> results) {
            paragraphAdapter.notifyDataSetChanged();
    
            dialog.dismiss();
    
            super.onPostExecute(results);
        }
    
    }
    
    private class LoadGesetzeTask extends
            AsyncTask<Object, Object, ArrayList<Gesetz>> {
    
        private final ProgressDialog dialog = new ProgressDialog(
                local.getActivity());
    
        @Override
        protected void onPreExecute() {
    
            dialog.setMessage("Suche...");
            dialog.show();
    
            super.onPreExecute();
        }
    
        @Override
        protected ArrayList<Gesetz> doInBackground(Object... params) {
            gesetzeItems.clear();
            gesetzeItems.addAll(Global.mGesetze.getGesetze((String) params[0],
                    (Integer) params[1]));
            return gesetzeItems;
        }
    
        @Override
        protected void onPostExecute(ArrayList<Gesetz> results) {
            gesetzeAdapter.notifyDataSetChanged();
    
            dialog.dismiss();
    
            super.onPostExecute(results);
        }
    
    }
    
    public static GesetzeFragment newInstance(int info) {
        GesetzeFragment f = new GesetzeFragment();
    
        Bundle args = new Bundle();
        args.putInt("Info", info);
        f.setArguments(args);
    
        return f;
    }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:orientation="vertical" >
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:orientation="vertical" >
    
        <ToggleButton
            android:id="@+id/toggleButton_modus"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textOff="Gesetze"
            android:textOn="Paragraphen" />
    
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent" >
    
        <EditText
            android:id="@+id/editText_search_query"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:ems="10"
            android:imeOptions="actionDone"
            android:inputType="text"
            android:singleLine="true" >
    
            <requestFocus />
        </EditText>
    
        <ImageButton
            android:id="@+id/imageButton_search"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:contentDescription="@+id/imageButton_search"
            android:scaleType="center"
            android:src="@drawable/ic_action_search_dark" />
    </LinearLayout>
    
    <ListView
        android:id="@+id/listView_search_results"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:clickable="true" >
    
    </ListView>
    
    public class ParagraphenAdapter extends ArrayAdapter<Paragraph>{
    
    Context mContext;
    int layoutResourceId;
    ArrayList<Paragraph> items = null;
    
    public ParagraphenAdapter(Context context, int textViewResourceId, ArrayList<Paragraph> objects) {
        super(context, textViewResourceId, objects);
    
        this.mContext = context;
        this.layoutResourceId = textViewResourceId;
        this.items = objects;
    
    }
    
    public ArrayList<Paragraph> getItems() {
        return items;
    }
    
    public void setItems(ArrayList<Paragraph> items) {
        this.items = items;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewsHolder mHolder = null;
        Paragraph item = items.get(position);
    
        if (convertView == null) // Wird zum ersten Mal gelanden...
        {
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            convertView = inflater.inflate(R.layout.paragraph_list_item, parent, false);
    
            mHolder = new ViewsHolder();
            mHolder.tvGesetzTitelShort = (TextView) convertView.findViewById(R.id.textView_gesetz_titel);
            mHolder.tvParagraphTitle = (TextView) convertView.findViewById(R.id.textView_paragraph_titel);
            mHolder.tvTextPreview = (TextView) convertView.findViewById(R.id.textView_preview_text);
            mHolder.btnFavorite = (ImageButton) convertView.findViewById(R.id.imageButton_favorite);
    
            convertView.setTag(mHolder);
    
        } else {
            mHolder = (ViewsHolder) convertView.getTag();
        }
    
        mHolder.tvGesetzTitelShort.setText(item.getGesetz().getNameShort());
        mHolder.tvParagraphTitle.setText(item.getParagraph());
    
        Spanned spannedContent = Html.fromHtml(item.getText());
        mHolder.tvTextPreview.setText(spannedContent, BufferType.SPANNABLE);
    
        return convertView;
    
    }
    
    static class ViewsHolder {
        TextView tvGesetzTitelShort;
        TextView tvParagraphTitle;
        TextView tvTextPreview;
        ImageButton btnFavorite;
    }
    
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:orientation="vertical" >
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#D8D8D8" >
    
        <ImageButton
            android:id="@+id/imageButton_favorite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:focusable="false"
            android:src="@android:drawable/btn_star_big_off" />
    
        <TextView
            android:id="@+id/textView_gesetz_titel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerHorizontal="false"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/imageButton_favorite"
            android:background="@android:color/transparent"
            android:padding="5dp"
            android:text="AO"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
    </RelativeLayout>
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffF2F2F2" >
    
        <TextView
            android:id="@+id/textView_paragraph_titel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:background="@android:color/transparent"
            android:maxLines="1"
            android:padding="5dp"
            android:text="§ 1"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    
    </RelativeLayout>
    
    <TextView
        android:id="@+id/textView_preview_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:maxLines="3"
        android:padding="5dp"
        android:text="Bla bla Bla bla Bla bla Bla bla Bla bBla bla Bla bla Bla bla Bla bla Bla bla la Bla bla Bla bla Bla bla Bla bla " />
    
    公共类段落适配器扩展了ArrayAdapter{
    语境;
    国际布局资源;
    arraylistitems=null;
    公共段落适配器(上下文上下文、int textViewResourceId、ArrayList对象){
    超级(上下文、textViewResourceId、对象);
    this.mContext=上下文;
    this.layoutResourceId=textViewResourceId;
    此项=对象;
    }
    公共阵列列表getItems(){
    退货项目;
    }
    公共无效集合项(ArrayList项){
    这个项目=项目;
    }
    @凌驾
    公共视图getView(int位置、视图转换视图、视图组父视图){
    ViewsHolder mHolder=null;
    段落项=项。获取(位置);
    如果(convertView==null)//Wird zum ersten Mal gelanden。。。
    {
    LayoutFlater充气器=(LayoutFlater)mContext
    .getSystemService(上下文布局\充气机\服务);
    convertView=充气机。充气(R.layout.段落列表项,父项,false);
    mHolder=新的ViewsHolder();
    mHolder.tvGesetzTitelShort=(TextView)convertView.findViewById(R.id.TextView\u gesetz\u titel);
    mHolder.tvParagraphTitle=(TextView)convertView.findViewById(R.id.TextView\u段落\u titel);
    mHolder.tvTextPreview=(TextView)convertView.findViewById(R.id.TextView\u preview\u text);
    mHolder.btnFavorite=(ImageButton)convertView.findViewById(R.id.ImageButton\u收藏夹);
    convertView.setTag(mHolder);
    }埃尔