Обновление ListView наSharedPreferenceChanged - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь обновить свой ListView, когда onSharedPreferenceChanged. Я попробовал следующее, но это не работает:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) 
{   
    if(!firstRun)
    {

        list.clear();
        populateList();
    }
    firstRun = false;
}

Проблема в том, что я не знаю, какой они ключ данных, который изменился, поскольку это может быть одна из 7 различных строк данных. Вот Активность со списком, который я хочу обновить:

    @Override
public void onCreate(Bundle savedInstanceState) 
{

    super.onCreate(savedInstanceState);
    userInfo = this.getSharedPreferences(USERINFO_FILE, 0);
    userInfo.registerOnSharedPreferenceChangeListener(this);
    userControl = new UserController(context);
    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    list = new ArrayList<HashMap<String,String>>();

    callForwardList = new SimpleAdapter( 
            this, 
            list,
            R.layout.callforward_items,
            new String[] { "line1","line2" },
            new int[] { R.id.callforward_item_text, R.id.callforward_number } );

    new PullInfoTask().execute();

    setListAdapter( callForwardList );

    lv.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
    {
        switch(position)
        {
        case 0:
            customDialogOnAlways();
            break;
        case 1:
            customDialogOnBusy();
            break;
        case 2:
            customDialogOnNoAnswer();
            break;
        }
    }

  });

}

РЕДАКТИРОВАТЬ Код для populateList

    private void populateList() 
{
    cfinfo = userControl.GetCallForwardInfo();

    if(Integer.parseInt( cfinfo[0]) == 1)
        addItem("Viderestilling altid", cfinfo[1]);
    else
        addItem("Viderestilling altid", "Slået fra");
    if(Integer.parseInt(cfinfo[2]) == 1)
        addItem("Viderestilling ved optaget", cfinfo[3]);
    else
        addItem("Viderestilling ved optaget", "Slået fra");
    if(Integer.parseInt(cfinfo[4]) == 1)
        addItem("Viderestilling ved intet svar", cfinfo[5]);
    else
        addItem("Viderestilling ved intet svar","Slået fra");

      callForwardList.notifyDataSetChanged();
}

private void addItem(String label, String number) 
{
      HashMap<String,String> item = new HashMap<String,String>();
      item.put( "line1", label );
      item.put( "line2", number );

      list.add( item );
}

1 Ответ

0 голосов
/ 01 марта 2012

Вы должны создать глобальный список переменных, чтобы callForwardList мог принять его через уведомление об изменении.Ниже приведен рабочий код

SimpleAdapter  callForwardList;
    ArrayList<HashMap<String, String>> list;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //  setContentView(R.layout.main);
        ListView lv = getListView();
        list = new ArrayList<HashMap<String,String>>();

        HashMap<String,String> item = new HashMap<String,String>();
        item.put( "line1", "asas" );
        item.put( "line2", "12121" );

        list.add( item );

        callForwardList = new SimpleAdapter( 
                this, 
                list,
                R.layout.callforward_items,
                new String[] { "line1","line2" },
                new int[] { R.id.callforward_item_text, R.id.callforward_number } );

        setListAdapter( callForwardList );
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                 HashMap<String,String> item = new HashMap<String,String>();
                 item.put( "line1", "asas111" );
                 item.put( "line2", "1212111" );

                 list.add( item );
                 callForwardList.notifyDataSetChanged();
            }

        });


    }
    public void addf(View v)
    {
         HashMap<String,String> item = new HashMap<String,String>();
         item.put( "line1", "asas111" );
         item.put( "line2", "1212111" );

         list.add( item );
         callForwardList.notifyDataSetChanged();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...