单击保存按钮后,Android列表不会刷新

时间:2012-04-02 08:56:27

标签: android android-activity android-intent

我有一个应用程序,我在单击“保存”按钮后尝试刷新列表。

逻辑是这样的: 1.检索水果清单 2.在同一屏幕上,我可以编辑/添加新的水果名称 3.如果我选择添加水果名称,它会为我带来一些表格标签,一旦输入,我点击保存按钮。 4.点击保存,它会给我带来检索水果列表的活动(步骤1)。

public class firstActivity extends Activity{
private SQLiteDatabase db;
Button saveButton;
public void onCreate(Bundle savedInstance){
// some code here
saveButton = (Button) findViewById(R.id.savedata);
db = openOrCreateDatabase("location.db",
            SQLiteDatabase.CREATE_IF_NECESSARY, null);


        saveButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String fruitName;
                fruitName = fruitName.getText().toString();
    ContentValues fruitContent = new ContentValues();
    fruitContent.put("fruit_name",fruitName);


    if (!(db.isOpen())) {
    db = openOrCreateDatabase("location.db",SQLiteDatabase.CREATE_IF_NECESSARY, null);
    }
    fruitId = (int) db.update(FRUIT_TABLE, fruitContent,"fruit_id=" + f_P_Id, null);
    db.close();
    } else {
    if (!(db.isOpen())) {
    db = openOrCreateDatabase("location.db",SQLiteDatabase.CREATE_IF_NECESSARY, null);
        }
    fruitId = (int) db.insertOrThrow(FRUIT_TABLE, null,fruitContent);

    db.close();
    }
    Log.i(TAG, "New Fruit Id:" + fruitId);

    Intent intent = new Intent(firstActivity.this,secondActivity.class);
                    startActivity(intent);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

        });
}
}

public class secondActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        Log.i(TAG, "cmg");
        setContentView(R.layout.fruitlist);

        /**
         * database code
         */
        SQLiteDatabase db;
        db = openOrCreateDatabase("location.db",
                SQLiteDatabase.CREATE_IF_NECESSARY, null);
        if (db != null)
            Log.i(TAG, "database created");
        else
            Log.i(TAG, "DAtabase null");

        //db.execSQL(CREATE_TABLE_1);


        Cursor cursor = db.query(tablename, null, null, null, null, null, null);

        int listSize = cursor.getCount();
        final String[] fruit_List = new String[listSize + 1];

        cursor.moveToFirst();
        int arrIter = 0;
        while (cursor.isAfterLast() == false) {
            Log.i(TAG, "Coumn Value:" + cursor.getString(0));
            fruitList[arrIter] = cursor.getString(1);
            cursor.moveToNext();
            arrIter++;
        }
        fruit_List[arrIter] = "New Fruit";
        Log.i(TAG, "FruitList:");
        for (int i = 0; i < fruit_List.length; i++) {
            Log.i(TAG, "Fruit:" + fruit_List[i]);
        }
        Log.i(TAG, "Count:" + cursor.getCount());
        cursor.close();
        db.close();

        ListView listView = (ListView) findViewById(R.id.list);

        if (listView != null) {
            listView.setAdapter(new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, fruit_List));
        } else {
            Log.i(TAG, "Null");
        }


        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // When clicked, show a toast with the TextView text

                Intent intent = new Intent(view.getContext(),
                        firstActivity.class);
                startActivity(intent);

            }
        });

    }

}

不知怎的,我没有带我到secondActivity并获得新列表。有人可以帮助我吗?

感谢。

6 个答案:

答案 0 :(得分:1)

调用ListView.notifyDataseInvalidate()将刷新ListView。

答案 1 :(得分:0)

当您想要刷新ListView时,请记住您必须插入此声明。

listviewobject.setAdapter(adapter);

这将自动刷新列表。

答案 2 :(得分:0)

按下保存按钮时有任何异常吗? 如果不是,则可能意味着没有正确设置点击侦听器,因此请确保在按下保存按钮时输入onClick方法。

您还可以使用android:onClick属性来避免以编程方式设置点击侦听器。

在XML布局的Button部分:

android:onClick="onSaveButtonClicked"

在您的活动中:

public void onSaveButtonClicked(View view){
 ...
}

答案 3 :(得分:0)

问题是,您需要知道保存列表的位置,在输入第二个活动之前,您应该更新此列表并在其他活动中访问它,无论是使用数据库/还是将Extra放在此意图上然后将整个列表发送到第二个活动。

注意:如果您使用的是适配器,请使用adapter.notifyDatasetChanged()函数更新适配器中的列表。

答案 4 :(得分:0)

对于您的问题,您必须使用自定义适配器。更好的解决方案..

LINK供您参考

答案 5 :(得分:0)

@JModi:做下面的事情......

1)单击按钮时:    在数据库中插入适当的条目。

2)让另一个方法说“refreshList()”,你可以在其中执行与制作列表相同的操作。

并在数据库中输入后调用此方法。

- &GT;使用您的数据库并再次列出该列表。 - &GT;不要忘记在“refreshList()”方法的开头使用listViewObject.clear()方法。

我已经完成了,这种方法工作正常...... !! 希望它会帮助你...... !! 最好的运气.. !!