如何在单击ListView中的项目后处理SharedPreferences中的更改?

时间:2014-07-21 21:05:56

标签: java android listview sharedpreferences

我的目标是让一个活动可以像玩家的包。我使用数据库来存储对象,我希望有可能从包中做一些事情。 我想让它们可以点击,并且有一个对话框,其中包含玩家可以做什么的选项。对话框中的4个按钮必须能够:从数据库中删除单击的对象(已经得到它),关闭对话框(已经得到它),并使用和显示有关被点击对象的信息。问题是我无法识别被点击的项目。我该怎么做?以及如何更改不同点击项目的首选项?

public class TestDatabaseActivity extends ListActivity implements
    OnClickListener {
private ItemsDataSource datasource;
TextView dt;
SharedPreferences prefs;
String str;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final ListView list = (ListView) findViewById(R.id.list);datasource = new ItemsDataSource(this);
    datasource.open();

    List<Item> values = datasource.getAllItems();

    prefs = getSharedPreferences("com.eightynineindustries.librogamebase",MODE_PRIVATE);
    String sel=prefs.getString("sel",null);

    Toast.makeText(this, ""+sel, Toast.LENGTH_LONG).show(); 

    // use the SimpleCursorAdapter to show the
    // elements in a ListView
    ArrayAdapter<Item> adapter = new ArrayAdapter<Item>(this,
            android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);


      }

// Will be called via the onClick attribute
// of the buttons in main.xml
public void onClick(View view) {
    @SuppressWarnings("unchecked")
    ArrayAdapter<Item> adapter = (ArrayAdapter<Item>) getListAdapter();
    Item item = null;
    switch (view.getId()) {
    case R.id.add:
        String[] items = new String[] { "pozione", "lettera", "spada",
                "cavallo" };
        int nextInt = new Random().nextInt(4);
        // save the new comment to the database
        item = datasource.createItem(items[nextInt]);
        adapter.add(item);
        break;
    case R.id.delete:
        if (getListAdapter().getCount() > 0) {
            item = (Item) getListAdapter().getItem(0);
            datasource.deleteItem(item);
            adapter.remove(item);
        }
        break;
    case R.id.pane:



        break;
    }
    adapter.notifyDataSetChanged();
}

@Override
protected void onResume() {
    datasource.open();
    super.onResume();
}

@Override
protected void onPause() {
    datasource.close();
    super.onPause();
}

@Override
protected void onListItemClick(  final ListView list, View v, final int position,
        long id) {

    prefs = getSharedPreferences("com.eightynineindustries.librogamebase",MODE_PRIVATE);
//  str =  (String) list.getItemAtPosition(position);

    // TODO Auto-generated method stub
    super.onListItemClick(list, v, position, id);

    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.dialog);
    dialog.setTitle("Oggetto selezionato");



    Button button1 = (Button) dialog.findViewById(R.id.button1);
    Button button2 = (Button) dialog.findViewById(R.id.button2);
    Button button3 = (Button) dialog.findViewById(R.id.button3);
    Button button4 = (Button) dialog.findViewById(R.id.button4);
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
    button3.setOnClickListener(this);
    button4.setOnClickListener(this);



    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View d) {
            // do something to change prefs and then delete the item

            @SuppressWarnings("unchecked")
            ArrayAdapter<Item> adapter = (ArrayAdapter<Item>) getListAdapter();
            Item item = null;

            str = (String) getListView().getItemAtPosition(position);



            if ( str == "cavallo") {
                prefs.edit().putString("sel", "cavallo").commit();
            } else if (str == "lettera" ) {
                prefs.edit().putString("sel", "lettera").commit();
            } else if (str == "spada") {
                prefs.edit().putString("sel", "spada").commit();
            } else if (str == "pozione") {
                prefs.edit().putString("sel", "pozione").commit();
            } else {
                prefs.edit().putString("sel", "cacchiolo").commit();
            }
            item = (Item) getListView().getItemAtPosition(position);
            datasource.deleteItem(item);
            adapter.remove(item);

            dialog.dismiss();
        }
    });
    button2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            // do something to delete selected item

            @SuppressWarnings("unchecked")
            ArrayAdapter<Item> adapter = (ArrayAdapter<Item>) getListAdapter();
            Item item = null;
            item = (Item) getListView().getItemAtPosition(position);
            datasource.deleteItem(item);
            adapter.remove(item);

            dialog.dismiss();
        }
    });
    button3.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });

    button4.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });

    dialog.show();
}}
直到这一刻,每次我按下第一个按钮使用该项目并将其删除时,共享的首选项将更改为“cacchiolo”,我按下的每个项目。我怎么解决呢?

1 个答案:

答案 0 :(得分:0)

您正在将字符串与==进行比较。这不是字符串的正确等式。使用str.equals("other string")

这里解释如下: How do I compare strings in Java?