无法刷新ListView

时间:2012-05-15 07:02:47

标签: android listview

点击“更多”按钮后,它会将列表视图从10扩展到20。

然而,点击后,列表视图没有延伸并保持原始大小。

它只能保持滚动条的位置。这是我需要的一半。

newsid = new int[webservice.news.size()];
        title = new String[webservice.news.size()];
        date = new String[webservice.news.size()];
        imagepath = new String[webservice.news.size()];
        for (int i = 0; i < webservice.news.size(); i++) {
            newsid[i] = webservice.news.get(i).getID();
            title[i] = webservice.news.get(i).getNtitle();
            date[i] = webservice.news.get(i).getNArticalD();
            imagepath[i] = webservice.news.get(i).getImagePath();
        }
        adapter = new CustomAdapter_ParticularCategoryAllNews(this, title,
                date, imagepath);
        lv.addFooterView(footermore);
        if (constant.isOnline()) {
            lv.addFooterView(constant.AdMob());
        }
        TextView titletext = (TextView) findViewById(R.id.text_pagetitle);
        titletext.setText(pagetitletext.toString());
        lv.setAdapter(adapter);

这是在启动活动时调用。

btnmore.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
for (int i = 0; i < webservice.news.size(); i++) {                                                                           
newsid[i] = webservice.news.get(i).getID();
title[i] = webservice.news.get(i).getNtitle();
date[i] = webservice.news.get(i).getNArticalD();
imagepath[i] = webservice.news.get(i).getImagePath();
}       
adapter.setTitle(title);
adapter.setDate(date);
adapter.setImagepath(imagepath);
position = lv.getFirstVisiblePosition();
lv.smoothScrollToPosition(position);
adapter.notifyDataSetChanged();

这是我点击“更多按钮”后调用的内容。但是,该清单并未从10个项目扩展到20个项目。

public class CustomAdapter_ParticularCategoryAllNews extends BaseAdapter {

private Activity activity;
private String[] title, date, imagepath;
private static LayoutInflater inflater = null;
private ImageLoader_Loader imageLoader;
private WindowManager wm = null;
private Display display;
private Config_ConstantVariable constant;

public CustomAdapter_ParticularCategoryAllNews(Activity a, String[] title,
        String[] date, String[] imagepath) {
    activity = a;
    this.title = title;
    this.date = date;
    this.imagepath = imagepath;
    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
    imageLoader = new ImageLoader_Loader(activity.getApplicationContext());
    constant = new Config_ConstantVariable(activity);
}

public int getCount() {
    return title.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public void setTitle(String[] title) {
    this.title = title;
}

public void setDate(String[] date) {
    this.date = date;
}

public void setImagepath(String[] imagepath) {
    this.imagepath = imagepath;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    if (convertView == null)
        vi = inflater.inflate(R.layout.main_particularcategoryallnewslist,
                parent, false);

    LinearLayout linear = (LinearLayout) vi.findViewById(R.id.layout_image);

    ImageView imageview = (ImageView) vi
            .findViewById(R.id.image_categoryallnewstitle);

    TextView titletext = (TextView) vi
            .findViewById(R.id.text_categoryallnewstitle);

    TextView datetext = (TextView) vi.findViewById(R.id.text_newsdate);

    if (!imagepath[position].toString().equals("no picture")) {
        imageview.setVisibility(View.VISIBLE);
        linear.setVisibility(View.VISIBLE);
        imageLoader.DisplayImage(imagepath[position], imageview);
    } else {
        imageview.setVisibility(View.GONE);
        imageview.setImageDrawable(null);
        linear.setVisibility(View.GONE);
        display = wm.getDefaultDisplay();
        int screenWidth = display.getWidth();
        titletext.setWidth(screenWidth);
    }
    if (constant.getscreenresolution() >= 800 && constant.ScreenOrientation() == 1) {
        titletext.setTextSize(TypedValue.COMPLEX_UNIT_PX, 30);
        datetext.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20);
    }
    titletext.setText(title[position].toString());
    datetext.setText(date[position].toString());
    return vi;
}

}

这是CustomAdapter类。

2 个答案:

答案 0 :(得分:0)

adapter.notifyDataSetChanged();试试这个

答案 1 :(得分:0)

在适配器中添加:

public void setTitle(String[] title) {
    this.title = title;
}

public void setDate(String[] date) {
    this.date = date;
}

public void setImagepath(String[] imagepath) {
    this.imagepath = imagepath;
}

当按下more按钮时,使用包含20个对象的数组调用上述三种方法。然后在适配器上调用notifyDataSetChanged

<强>更新

这对我有用: 活性:

public class HelpProjectActivity extends Activity {

    private ArrayList<Item> items;
    private boolean extend = false;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        createArray();

        ListView lv = (ListView)findViewById(R.id.list);
        lv.setAdapter(new HelpListAdapter());
    }

    private void createArray() {
        items = new ArrayList<Item>();
        for(int i = 0; i < 20; i++) {
            Item item = new Item();
            item.title = "Title " + i;
            item.subtitle = "Subtitle " + i;
            item.image = "default";
            items.add(item);
        }
    }

    public void morePressed(View v) {
        extend = !extend;
        Button b = (Button) findViewById(R.id.button);
        b.setText(extend ? R.string.less_button : R.string.more_button);
        ListView lv = (ListView)findViewById(R.id.list);
        ((BaseAdapter)lv.getAdapter()).notifyDataSetChanged();
    }

    private class HelpListAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            if (extend) {
                return items.size();
            } 
            return items.size()/2;
        }

        @Override
        public Object getItem(int pos) {
            return items.get(pos);
        }

        @Override
        public long getItemId(int pos) {
            return pos;
        }

        @Override
        public View getView(int pos, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                v = View.inflate(getApplicationContext(), R.layout.litst_item, null);
            }
            Item item = items.get(pos);
            TextView titleText = (TextView) v.findViewById(R.id.list_item_title);
            titleText.setText(item.title);
            TextView subtitleText = (TextView) v.findViewById(R.id.list_item_subtitle);
            subtitleText.setText(item.subtitle);
            ImageView image = (ImageView) v.findViewById(R.id.list_image);
            if (item.image.equalsIgnoreCase("default")) {
                image.setImageResource(R.drawable.default_list_image);
            } else {
                // what ever
            }
            return v;
        }

    }
}

main.xml中:

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

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_margin="10dp"
        android:onClick="morePressed"
        android:text="@string/more_button" />

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

list_item.xml:

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

    <ImageView
        android:id="@+id/list_image"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_margin="5dp"
        android:layout_gravity="center_vertical"
        android:contentDescription="@string/list_image" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/list_item_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/list_item_subtitle"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textStyle="italic" />
    </LinearLayout>

</LinearLayout>

Item.java:

public class Item {
    String image;
    String title;
    String subtitle;
}