android - 如何从另一个活动中删除回收站视图中的数据
问题描述
我有一项活动,我正在阅读 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();
}
}
}
解决方案
解决您的问题的一种方法是通过启动第二个活动startActivityForResult
并根据用户在第二个活动上采取的操作将附加内容放入意图和调用setResult
中并在该调用下方finish()
,然后您的 MainActivityonActivityResult
将被调用。在里面onActivityResult
你可以调用你的函数checkToDeleteOrRename(Intent intent)
,intent 基本上是你在里面onActivityResult
作为参数接收。希望对你有帮助!!!。