如何刷新活动而不丢失所有数据?

时间:2016-04-02 00:44:21

标签: android android-activity android-imagebutton

我想通过点击一些ImageButton删除一个对象。当我这样做时,只有当我执行另一个动作时,该项目才会消失。我进行了研究,可以通过刷新活动来改变它。问题是,当我这样做时,所有其他项目也从我的列表中消失。我试图通过SQLite将对象添加到表中,然后再次检索它们。有更简单的方法吗?

谢谢。

修改

enter image description here

当我点击猕猴桃的十字架将其删除时

如果我有这个:

 public void removeProduct(View v) {

    Integer position = (Integer) v.getTag();

    Product p1 = (Product) adapter.getItem(position);
    productsGridView.remove(p1);
 }

它会删除,但只有当我点击该应用的其他部分时,才会立即删除。

我正在寻找一种立即行动的方法。我在想这个

public void removeProduct(View v) {

    Integer position = (Integer) v.getTag();

    Product p1 = (Product) adapter.getItem(position);
    productsGridView.remove(p1);

    Intent intent = getIntent();
    finish();
    startActivity(intent);
    }

但是后来我没有使用morango和banana,我在列表中得到0个产品......

4 个答案:

答案 0 :(得分:2)

只需刷新适配器,而不是重新启动活动

public void removeProduct(View v) {

    Integer position = (Integer) v.getTag();

    Product p1 = (Product) adapter.getItem(position);
    productsGridView.remove(p1);

    adapter.notifyDataSetChanged();
}

答案 1 :(得分:0)

只需刷新视图而不是整个活动。这样,您就可以将数据保存在当前活动实例中。

答案 2 :(得分:0)

如果确实需要刷新活动,可能有一种棘手的方法可以解决。棘手的方式意味着我的方式可能不适合这种情况。你试过静态属性吗?在活动中触发finish()时,不会释放静态属性。活动重建时,您可以从静态属性加载数据。这是我的测试应用程序。

public class MainActivity extends AppCompatActivity {

    private static ArrayList<Integer> list;

    private Button btn;
    private int counter = 0;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = (Button) findViewById(R.id.test);
        textView = (TextView) findViewById(R.id.text);

        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (list == null) {
                    list = new ArrayList<Integer>();
                }
                list.add(counter++);
                Toast.makeText(MainActivity.this, counter + "", Toast.LENGTH_SHORT).show();
                if (counter == 2) {
                    Intent intent = getIntent();
                    finish();
                    startActivity(intent);
                }
            }
        });

        if (list == null)
            Toast.makeText(MainActivity.this, "List is null", Toast.LENGTH_SHORT).show();
        else
            textView.setText("The list size is " + list.size() + "\nThe counter is " + counter);
    }
}

XML布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.myapplication.MainActivity">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <Button
        android:id="@+id/test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Test" />
</RelativeLayout>

希望这可以提供帮助。事实上,F43nd1r的解决方案应该是一个很好的解决方案,只刷新视图。

答案 3 :(得分:0)

无需刷新活动。 您应该从列表中删除您的项目,并通过adapter.notifyDataSetChanged()或adapter.notifyItemRemoved(position)通知适配器。