android中的listview和notifydatasetchanged

时间:2011-06-23 05:19:24

标签: android

我有CustomListView ImageView

当我选择任何项目时,图像视图会发生变化。我需要在另一个ListView中显示所选项目。我浏览了文档,我得到了使用notifydatasetchanged()的线索..但问题是我不知道如何使用它或在哪里使用它。

4 个答案:

答案 0 :(得分:3)

查看示例示例以了解如何使用notifyDatasetChanged

实施例

import java.util.ArrayList;

import android.app.ListActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MyListView extends ListActivity {
    ArrayList<String> pens = new ArrayList<String>();
    ArrayAdapter arrayAdapter = null;
    private static final byte UPDATE_LIST = 100;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pens.add("MONT Blanc");
        pens.add("Gucci");
        pens.add("Parker");

        arrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, pens);
        setListAdapter(arrayAdapter);

        getListView().setTextFilterEnabled(true);
        ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                System.out.println("..Item is clicked..");
                Message msg = new Message();
                msg.what = UPDATE_LIST;
                updateListHandler.sendMessage(msg);
            }
        });



        // System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
        // System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));

    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub

        super.onConfigurationChanged(newConfig);
        System.out.println("...11configuration is changed...");
    }

    void addMoreDataToList() {
        pens.add("item1");
        pens.add("item2");
        pens.add("item3");

    }

    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Object o = this.getListAdapter().getItem(position);
        String pen = o.toString();
        Toast.makeText(this, id + "You have chosen the pen: " + " " + pen,
                Toast.LENGTH_LONG).show();
    }

    private Handler updateListHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case UPDATE_LIST:
                addMoreDataToList();
                arrayAdapter.notifyDataSetChanged();
                break;

            }
            ;
        };
    };




}

答案 1 :(得分:3)

我们用于notifydatasetchanged的{​​{1}}实际adapter方法不适用于listview

假设您正在使用BaseAdapter进行列表视图.. 所以使用

adaptername.notifydatasetchanged() where your image is changing.

了解更多信息,然后click here

答案 2 :(得分:0)

将您选择的项目放入数组中。 并使用适配器将项目放入列表视图。你是怎么做到的?请不要将您的问题标记为代码,现在很难阅读。

lv1 = (ListView) findViewById(R.id.ListView01);
adapter1 = new ArrayAdapter<String>(Osszekapcsolas.this,R.layout.list_black_text,R.id.list_content, yourArray);
lv1.setAdapter(adapter1);
adapter1.notifyDataSetChanged();

其中list_black_text在az和xml中包含每行的textview:

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

<TextView
android:id="@+id/list_content"
android:textColor="#222222"
android:layout_margin="4dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
/>
</LinearLayout>

但我想你知道这一点。但是,在此代码中没有ImageView。我不知道它为什么会改变,也许你在行中设置了layout_width,layout_height或其他参数错误。 希望这会有所帮助。

答案 3 :(得分:0)

实际上你只是告诉适配器列表视图。

之后在holdar.listview中,当图像发生变化时,在该事件中发生事件

adaptername.notifydatasetchanged();