我有一个活动,我正在读取JSONData并在回收者视图中列出。 我已经实现了在onLongClick 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();
}
}
}
答案 0 :(得分:0)
解决问题的一种方法是使用startActivityForResult
启动Second Activity,然后根据用户对Second Activity采取的操作,将其他内容放入意图中,然后调用setResult
,并在该调用下方finish()
,然后您的MainActivity的onActivityResult
将被调用。在onActivityResult
内部,您可以调用函数checkToDeleteOrRename(Intent intent)
,其目的基本上是在onActivityResult
内部作为参数。希望这会对您有所帮助!!
答案 1 :(得分:0)
您通过单击recyclerview中的项目转到另一个活动 使用staractivityforresult转到另一个第二活动 还可以使用put extra传递项目的位置
并使用onactivity导致设置适配器的1stctivity
从第二个活动开始,如果完成编辑或删除操作,则使用setresult返回使用putextra编辑,删除,位置参数
您将在onactivityresult的第一个活动中获得这些值
使用位置,相应地更改arraylist中的值,然后调用notifydatasetchanged