【问题标题】:Update Listview item and get values using BaseAdapter Android使用 BaseAdapter Android 更新 Listview 项并获取值
【发布时间】:2013-08-21 09:16:15
【问题描述】:

我有一个包含多个项目的列表视图。我想在单击按钮时更新项目值,并希望在单击按钮时获取所有项目的值。但我无法做到这一点。请帮助我获得此功能

活动代码

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_ItemValue);
        setContentView(R.layout.activity_iween_booking_page);
        listView = (ListView) findViewById(R.id.passengerList);

            showPassengerListView(passengerList);

        }

    getValue.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {

            if(){


            }else{
                //Here i have to get all the value of the listview items in a array
            } 

        }
    });


    }

    private void showPassengerListView(final String[] passengerList) {

        listView.setAdapter(new PassengerListUpdate(passengerList));
        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

            }
        });
    }
    public void passengerInformationPopup(final String[] passengerList, final int position) {
        final Dialog dialog= new Dialog(MainActivity.this,R.style.Dialog_Fullscreen);
        dialog.setContentView(R.layout.passenger_details_dialog); 
        dialog.show();

        setValueDialog.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                isSuccess= true;

                if(isSuccess){
                    dialog.cancel();
                    //Here i Have to Update the item at position with some value
                }
            }
        });
    }


    public void goBack(View v) {
        finish();
    }

    class PassengerListUpdate extends BaseAdapter {
        String[] ItemValue;

        public PassengerListUpdate(String[] text) {
            ItemValue = text;
        }

        public int getCount() {
            // TODO Auto-generated method stub
            return ItemValue.length;
        }

        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = getLayoutInflater();
            View vi;
            vi = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
            TextView ItemValue;

            ItemValue = (TextView) vi.findViewById(android.R.id.text1);
            ItemValue.setText(ItemValue[position]);
            return (vi);
        }
    }

请帮助我了解如何设置项目值以及如何获取列表视图值

【问题讨论】:

    标签: android android-layout android-intent android-listview


    【解决方案1】:

    [想要]点击按钮获取所有项目的值

    要获取所有值,请在PassengerListUpdate内创建一个方法getAllValues()

    public String[] getAllValues() {
        return ItemValue;
    }
    

    全局声明您的适配器:

    PassengerListUpdate myAdapter;
    

    showPassengerListView(String[])中初始化它:

    myAdapter = new PassengerListUpdate(passengerList);
    listView.setAdapter(myAdapter);
    

    要获取按钮单击时所有值的列表:

    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
    
            if (myAdapter != null) {
                String[] allValues = myAdapter.getAllValues();
            }
    
        }
    });
    

    我想在点击按钮时更新项目值

    要更新值,您可以简单地重新初始化并设置myAdapter

    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            myAdapter = new PassengerListUpdate(updatedPassengerList);
            listView.setAdapter(myAdapter);
        }
    });
    

    【讨论】:

    • 我想更新列表视图的特定项目并且我有项目的位置
    • @User 如果您需要更新特定项目,请使用位置 => passengerList[position] = newString;。在此之后 => listView.setAdapter(new PassengerListUpdate(passengerList));.
    • @thanks vikram 从过去 2 天开始,我一直被困在这个问题上,非常感谢您的帮助 ...
    【解决方案2】:

    首先,为了获取 ListView 中的完整值。您可以获取适配器中的项目数,然后根据其位置逐个获取值。

        ArrayList<String> results = new ArrayList<String>();
        final int count = mMyAdapter.getCount();
        for( int i = 0; i < count; ++i ){
            String item = mMyAdapter.getItem(i);
            results.add(item);
        }
        return results;
    

    其次,为了增加或更新ListView的值,一般来说扩展ArrayAdapter比实现BaseAdapter要容易得多,因为ArrayAdapter本身就支持add/remove/insert方法。例如,

    public class MyAdapter extends ArrayAdapter<String> {
    
        public MyAdapter(Context context) {
            super(context, 0);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = getLayoutInflater();
            View vi;
            vi = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
            TextView ItemValue;
    
            ItemValue = (TextView) vi.findViewById(android.R.id.text1);
            ItemValue.setText(ItemValue[position]);
            return (vi);
        }
    }
    

    而且你可以直接更新适配器的值 quiet,

    mMyAdapter.add("Add Item");
    mMyAdapter.remove("Remove Item");
    mMyAdapter.insert("Insert Item", 0);
    

    完成工作后,您可以调用适配器的 notifyDatSetChanged() 方法来更新 UI,我认为这比每次更新数据时都设置新适配器更有效。

    mMyAdapter.notifyDataSetChanged();
    

    【讨论】:

    • 我想一次更新列表视图的单个项目。我有项目的位置
    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2012-08-25
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多