Android 从另一个活动的GridView onClick中删除项

Android 从另一个活动的GridView onClick中删除项,android,button,gridview,android-activity,Android,Button,Gridview,Android Activity,更新了我的代码 当我在Day03活动中单击btn按钮时,我想从GridView主活动中删除一个项目 以下是我的活动: 公共类主要扩展活动{ GridView gridView; public static int deletePos; static ArrayAdapter adapter; static final String[] numbers = new String[] { "1", "2", "3", "4", "5", "6", "7" }; static fi

更新了我的代码

当我在Day03活动中单击btn按钮时,我想从GridView主活动中删除一个项目

以下是我的活动:

公共类主要扩展活动{

GridView gridView;
public static int deletePos;

static ArrayAdapter adapter;

static final String[] numbers = new String[] { "1", "2", "3", "4", "5",
        "6", "7" };
static final String[] activities = new String[] { "Day01", "Day02",
        "Day03", "Day04", "Day05", "Day06", "Day07" };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.grid);

    gridView = (GridView) findViewById(R.id.grid1);

    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, numbers);

    gridView.setAdapter(adapter);

    gridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub

            String val = activities[arg2]; // arg2 is the index of item
            Class ourClass = null;
            try {
                ourClass = Class.forName("com.example.cahllenge." + val);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Intent intent = new Intent(Main.this, ourClass);

            deletePos = arg2;
            adapter.notifyDataSetChanged();

            startActivity(intent);

        }
    });

}
Button btn;

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

    btn = (Button) findViewById(R.id.ok);

    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            int deletePos = Main.deletePos;
            Main.adapter.remove(deletePos);
            Main.adapter.notifyDataSetChanged();

        }
    });
}

首先,从另一个活动中删除grdView项目不是一个好的做法。无论如何,如果你想从另一个活动中删除它,你可以尝试一下。没有什么是不可能的。这可能会给你一些解决问题的技巧

在MainActivity和Day03活动中创建一个deletegridViewItem{}方法(如果单击该按钮),然后调用deletegridViewItem方法。您需要管理应删除的项目。希望这对您有所帮助

请看这张编辑过的照片

嘿,试试这个可能会给你一些线索…不要打电话 adapter.notifyDataSetChanged;在deletePos=arg2之后;只需调用StartActivityForresultent,请求代码;在此之前,使用intent.putExtra将deletePos放入intent中-下一步在第03天的活动中单击按钮调用完成方法,如下所示

 @Override
 public void finish() {
 // Prepare data intent 
 Intent data = new Intent();
 data.putExtra("put deletepos back to intent ");

 // Activity finished ok, return the data
 setResult(RESULT_OK, data);
 super.finish();
} 

下一步,在mainActivity句柄onActivityresult方法和onActivityresult方法中调用remove方法。并通知数据集方法…

如果您真的想这样做,并且不使用静态,我会这样做:

在您的主要活动中创建一个活动

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    int deleteMe = intent.getIntExtra('hasDeleted', 0);
    if (deleteMe > 0) {
        // delete numbers if it was List or update setAdapter with new numbers list
        adapter.notifyDataSetChanged();
    }
}
完成一次点击后的另一项活动:

Intent intent = new Intent(Day03.this, Main.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.putExtra("hasDeleted", toDeleteNumber);
startActivity(intent);
finish();

为什么需要另一个活动?您可以长时间单击侦听器并删除项目您可以使用带有网格项目的复选框并删除选中的项目。除非您想做其他事情,否则不需要仅删除项目的其他活动我在Day03活动中有一种测验,我更希望在用户自动完成时进行lly从GridView中删除该项。你可以考虑重新设计你的应用程序。第二个应用程序真的没用。你有例子吗?没有,我没有设计你的应用程序,也没有类似的代码OHHH在notifyDataSetChanged之前添加你想要删除的删除代码和变量-更新的代码我已经这样做了,但不起作用:@Override protected void onNewIntentIntent intent{super.onNewIntentIntent;如果intent.getBooleanExtrahasDeleted,则为false{adapter.removenumbers;adapter.notifyDataSetChanged;}啊,试着在startactivityohh没有注意到您在适配器上执行finsih,我没有这样做。我通常会从数字数组中删除它,然后执行notifyDatasetChanged。因为数字是字符串数组,所以您必须重新创建它,然后执行另一个setAdapter,或者使用列表和数字。removetoDeleteStr;