首页 > 解决方案 > 如何从另一个活动中删除回收站视图中的数据

问题描述

我有一项活动,我正在阅读 JSONData 并在回收站视图中列出。我已经在LongClick Listener 上实现了删除数据。单击侦听器后,我将转到该项目的详细信息活动。我有一个标题,用于编辑标题的图像视图按钮和用于删除项目的按钮。`问题是,无论我尝试删除还是编辑标题,回到我的第一个活动时它都不起作用。我认为我没有在主要活动中正确加载适配器中的数据。但是我不知道如何做得更好,有什么解决办法吗?这是我的主要活动

public class MainActivity extends AppCompatActivity {
FloatingActionButton myFab;
ArrayList<ApiModel> mObjects = new ArrayList<>();
int i = 0;
    final String PHOTOS_URL = "http://jsonplaceholder.typicode.com/photos";
    List<ApiModel> objects = new ArrayList<>();
    private RecyclerView recyclerView;
    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myFab = findViewById(R.id.fab);
        myFab.setImageResource(R.drawable.add);            
        initRecyclerView();
        adapter.setData(mObjects);
        adapter.notifyDataSetChanged();
        //TODO: CHECK WHY NOT WORK DELETE
        checkToDeleteOrRename();
        adapter.notifyDataSetChanged();
        getJsonObjects();
        adapter.notifyDataSetChanged();
         myFab.setOnClickListener(v -> {
             Intent intent = new Intent(MainActivity.this, SendPhoto.class);
             startActivity(intent);
         });

        }

private void checkToDeleteOrRename() {

    Intent intentChange = getIntent();
    String flag = intentChange.getStringExtra(FLAG_CHANGE);
    String flagDelete = intentChange.getStringExtra(FLAG_DELETED);
    try {


        if (flag.equals(CHANGED)) {
            String oldTitle = intentChange.getStringExtra(OLD_TITLE);
            String newTitle = intentChange.getStringExtra(NEW_TITLE);
            adapter.changeUserName(oldTitle, newTitle);

        }
        if(flagDelete.equals(DELETED)) {
            String userToDelete = intentChange.getStringExtra(USER_DELETED);
            adapter.remove(userToDelete);
        }
    } catch (Exception ex) {
        return;
    }

}

private void initRecyclerView() {
    recyclerView =  findViewById(R.id.myRecyclerView);
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    adapter = new MyAdapter(this.getApplicationContext());
    recyclerView.setAdapter(adapter);

}


public void getJsonObjects() {
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(PHOTOS_URL, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
                objects = fromJson(response);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                Toast.makeText(MainActivity.this, "Немате активна Интернет Конекција", Toast.LENGTH_LONG).show();
            }
        });
    }

    public ArrayList<ApiModel> fromJson(JSONArray jsonArray) {

        try {
            for (int i = 0; i < jsonArray.length(); i++) {

                try {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    ApiModel photoData = new ApiModel();

                    photoData.mTitle = jsonObject.getString("title");

                    photoData.Url = jsonObject.getString("url");
                    photoData.thumbnailUrl = jsonObject.getString("thumbnailUrl");
                    mObjects.add(photoData);
                    adapter.notifyDataSetChanged();


                } catch (JSONException e1) {
                    e1.printStackTrace();
                }
            }
        } catch (Exception ex) {
        }
        return mObjects;
    }
}

这是我在第二个活动中的删除和编辑标题方法

 public  void deleteThis(View view) {
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    builder = new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert);
} else {
    builder = new AlertDialog.Builder(this);
}
builder.setTitle("Delete entry")
        .setMessage("Are you sure you want to delete this entry?")
        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

                Intent deleteIntent = new Intent(SecondActivity.this, MainActivity.class);
                deleteIntent.putExtra(FLAG_DELETED, DELETED);
                deleteIntent.putExtra(USER_DELETED, mTextView.getText().toString());
                mSecondActivity.startActivity(deleteIntent);
                Toast.makeText(mSecondActivity, "User deleted", Toast.LENGTH_SHORT).show();
            }
        })
        .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // do nothing
            }
        })
        .setIcon(android.R.drawable.ic_dialog_alert)
        .show();

}

 public void editTitle(View view) {
DialogFragmentClass dialogFragment = new DialogFragmentClass();
dialogFragment.show(getFragmentManager(),"DIALOG");

}

这是我在适配器中按标题删除和编辑标题的方法

public void remove(String userName) {
    for (ApiModel model: data ) {
        if(model.getmTitle() .equals(userName)) {
            data.remove(model);
            notifyDataSetChanged();
        }
    }
} 
  public void changeUserName(String oldUserName, String newUsername){
    for (ApiModel model: data  ) {
        if(model.getmTitle().equals(oldUserName)){
            model.setTitle(newUsername);
            this.notifyDataSetChanged();
        }
    }
}

标签: android

解决方案


解决您的问题的一种方法是通过启动第二个活动startActivityForResult并根据用户在第二个活动上采取的操作将附加内容放入意图和调用setResult中并在该调用下方finish(),然后您的 MainActivityonActivityResult将被调用。在里面onActivityResult你可以调用你的函数checkToDeleteOrRename(Intent intent),intent 基本上是你在里面onActivityResult作为参数接收。希望对你有帮助!!!。


推荐阅读