我想通过点击一些ImageButton删除一个对象。当我这样做时,只有当我执行另一个动作时,该项目才会消失。我进行了研究,可以通过刷新活动来改变它。问题是,当我这样做时,所有其他项目也从我的列表中消失。我试图通过SQLite将对象添加到表中,然后再次检索它们。有更简单的方法吗?
谢谢。
修改的
当我点击猕猴桃的十字架将其删除时
如果我有这个:
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个产品......
答案 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)通知适配器。