0

我有一个活动,在特定条件下,它将一个整数值传递给包含 ListView 的活动。但是,我遇到了几个问题:

  1. 初始值为 0,当执行活动并满足条件时,传入另一个 0,而不是实际值。

  2. ListView 每次从主活动运行时都会重置。我希望它保留以前运行的结果(直到用户点击 ListView 活动本身的重置按钮)。

**编辑 3. 我注意到我之前没有注意到的行为,即每次从主活动打开 ListView 活动时,都会向 ListView 添加另一个 0。

这是相关代码 -

Activity 将值传递给包含 ListView 的 Activity:

if(condition) {
    textview.setText("String1");
    Intent intent = new Intent(this, ListViewActivity.class);
    intent.putExtra("numCounter", numCounter);
}

ListView 的活动:

ListView numListView;
ArrayAdapter<Integer> listAdapter; 

static ArrayList<Integer> numArrayList = new ArrayList<Integer>();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_name);

    Intent intent = getIntent();
    int intentNum = intent.getIntExtra("numCounter", 0);
    addNumArrayList(intentNum);

    numListView = (ListView) findViewById(R.id.numberListView);

    listAdapter = new ArrayAdapter<Integer>(this, R.layout.listview_row, numArrayList);

    numListView.setAdapter(listAdapter); 
}

// Keep ArrayList to size of 10, while keeping it sorted 
// (displaying only the 10 lowest)

public static void addNumArrayList(int val) {
    numArrayList.add(val);
    Collections.sort(numArrayList);
    if(numArrayList.size() > 10) {
        for(int i = 10; i < numArrayList.size(); i++) {
            numArrayList.remove(i);
        }
    }
}

我基本上想要它,以便只有其他活动或活动可以改变它,除非在 ListView 活动本身上点击重置按钮(只需从主活动打开活动应该什么都不做)。

我如何解决它?

4

1 回答 1

1

为 addnumArrayList 添加以下条件

Bundle mBundle = intent.getExtras();
if(mBundle != null && mBundle.containsKey(¨numCounter¨)){
    int intentNum = intent.getIntExtra("numCounter", 0);
    addNumArrayList(intentNum);
}

即使密钥不存在,您也会获得默认值 0。所以请检查密钥是否存在

至于 listView 被重置,您应该将值存储在文件中而不是静态变量中,如果进程被终止,这些值将被重置。

编辑:试试这个

   int intentNum = intent.getIntExtra("numCounter", -1); // -1 or any number that you do not pass
   if(intentNum != -1)
    addNumArrayList(intentNum);
于 2012-12-15T18:32:16.803 回答