将新列表添加到 listView
Add new list into listView
在ActivityA中有一个listView
和一个add button
。 listView
数据是从 MySQL
中检索到的。
[![http://i.stack.imgur.com/wVmSK.png][1]][1]
点击列表时,会传数据到ActivityB,如果点击添加button
,会传到[=42] =]Activity B 供用户添加数据。我使用 mClickedPosition
来区分是 list
被点击还是 button
被点击。
Activity一个
ListView listViewUpdate;
ListAdapter adapter;
Button add;
String ID, iD;
public static final int PROJECT_REQUEST_CODE = 1;
public static final int CAMERA_REQUEST_CODE = 2;
int mClickedPosition;
String ReceiveProject, ReceiveDescription, ReceiveTimeIn, ReceiveTimeOut;
Integer ReceiveProgress;
ArrayList<DetailsBean> results = new ArrayList<DetailsBean>();
String myJSON;
JSONArray details = null;
ArrayList<HashMap<String, String>> EditDetails;
listViewUpdate.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> listView, View view,
int position, long id) {
mClickedPosition = position; // listView click
HashMap<String, String> clickedItem = EditDetails.get(position);
iD = clickedItem.get(Configs.TAG_ID);
Intent intent = new Intent(getActivity(), Edit_Details.class);
intent.putExtra("iD", iD);
intent.putExtra("ID", ID);
intent.putExtra("mClickedPosition",mClickedPosition);
//Toast.makeText(getActivity(),"This is"+iD+ID,Toast.LENGTH_LONG).show();
startActivityForResult(intent, PROJECT_REQUEST_CODE);
}
});
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClickedPosition = -1; // if button clicked
Intent intent = new Intent(getActivity(), Edit_Details.class);
intent.putExtra("ID", ID);
startActivity(intent);
}
});
假设用户点击添加 button
。(mClickedposition==-1)
Activity B
当点击保存 button
时,数据将被插入到 MySQL
中,因为 mClickedPosition==-1 之后,我想要新数据 return 到 Activity A 并在 A 中添加一个新列表,这意味着 Activity A 现在应该有 2 个列表。我怎样才能做到这一点?
save.setOnClickListener(new View.OnClickListener() { // if save button clicked
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
project1 = Project2.getSelectedItem().toString();
description = Description.getText().toString();
progress = seekBar.getProgress();
timeIn = TimeIn.getText().toString();
timeOut = TimeOut.getText().toString();
if(mClickedPosition==-1)
{
Add(project1,description,progress,timeIn,timeOut);
}
else
{
Update(project1, description, progress, timeIn, timeOut);
}
returnIntent.putExtra("project1", project1);
returnIntent.putExtra("description", description);
returnIntent.putExtra("progress", progress);
returnIntent.putExtra("timeIn", timeIn);
returnIntent.putExtra("timeOut", timeOut);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
});
Activity上Activity结果
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Activity B and populate ListView A
if (resultCode == Activity.RESULT_OK) {
if (requestCode == PROJECT_REQUEST_CODE) {
ReceiveProject = data.getStringExtra("project1");
ReceiveDescription = data.getStringExtra("description");
ReceiveProgress = data.getIntExtra("progress", 0);
ReceiveTimeIn = data.getStringExtra("timeIn");
ReceiveTimeOut = data.getStringExtra("timeOut");
Toast.makeText(getActivity(),ReceiveProject+ReceiveDescription+ReceiveProgress+ReceiveTimeIn+ReceiveTimeOut,Toast.LENGTH_LONG).show();
if(mClickedPosition==-1)
{ // add list
HashMap<String, String> clickedItem = new HashMap<>();
clickedItem.put(Configs.TAG_PROJECT, ReceiveProject);
clickedItem.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
clickedItem.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
clickedItem.put(Configs.TAG_IN, ReceiveTimeIn);
clickedItem.put(Configs.TAG_OUT, ReceiveTimeOut);
EditDetails.add(clickedItem);
((BaseAdapter) adapter).notifyDataSetChanged();
}
else
{ // update list
HashMap<String, String> clickedItem =EditDetails.get(mClickedPosition);
clickedItem.put(Configs.TAG_PROJECT, ReceiveProject);
clickedItem.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
clickedItem.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
clickedItem.put(Configs.TAG_IN, ReceiveTimeIn);
clickedItem.put(Configs.TAG_OUT, ReceiveTimeOut);
((BaseAdapter) adapter).notifyDataSetChanged();
}
//((BaseAdapter) adapter).notifyDataSetChanged();
}
}
}
}
Now I can see a new list added in Activity A. But when I click the new
list and go to Activity B, no data are passed. But if I click the old
list, I can see data passed...
您需要在List中添加或更新新数据,然后调用notifiDataSetChanged()
;
将 activity A 的 onActivity 结果方法中的代码更改为如下 -
HashMap<String, String> item = new HashMap<>();
item.put(Configs.TAG_PROJECT, ReceiveProject);
item.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
item.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
item.put(Configs.TAG_IN, ReceiveTimeIn);
item.put(Configs.TAG_OUT, ReceiveTimeOut);
if(mClickedPosition==-1)
{ // add list
EditDetails.add(item);
}
else
{ // update list
EditDetails.remove(mClickedPosition);
mEventsList.add(mClickedPosition,item)
}
((BaseAdapter) adapter).notifyDataSetChanged();
在ActivityA中有一个listView
和一个add button
。 listView
数据是从 MySQL
中检索到的。
[![http://i.stack.imgur.com/wVmSK.png][1]][1]
点击列表时,会传数据到ActivityB,如果点击添加button
,会传到[=42] =]Activity B 供用户添加数据。我使用 mClickedPosition
来区分是 list
被点击还是 button
被点击。
Activity一个
ListView listViewUpdate;
ListAdapter adapter;
Button add;
String ID, iD;
public static final int PROJECT_REQUEST_CODE = 1;
public static final int CAMERA_REQUEST_CODE = 2;
int mClickedPosition;
String ReceiveProject, ReceiveDescription, ReceiveTimeIn, ReceiveTimeOut;
Integer ReceiveProgress;
ArrayList<DetailsBean> results = new ArrayList<DetailsBean>();
String myJSON;
JSONArray details = null;
ArrayList<HashMap<String, String>> EditDetails;
listViewUpdate.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> listView, View view,
int position, long id) {
mClickedPosition = position; // listView click
HashMap<String, String> clickedItem = EditDetails.get(position);
iD = clickedItem.get(Configs.TAG_ID);
Intent intent = new Intent(getActivity(), Edit_Details.class);
intent.putExtra("iD", iD);
intent.putExtra("ID", ID);
intent.putExtra("mClickedPosition",mClickedPosition);
//Toast.makeText(getActivity(),"This is"+iD+ID,Toast.LENGTH_LONG).show();
startActivityForResult(intent, PROJECT_REQUEST_CODE);
}
});
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClickedPosition = -1; // if button clicked
Intent intent = new Intent(getActivity(), Edit_Details.class);
intent.putExtra("ID", ID);
startActivity(intent);
}
});
假设用户点击添加 button
。(mClickedposition==-1)
Activity B
当点击保存 button
时,数据将被插入到 MySQL
中,因为 mClickedPosition==-1 之后,我想要新数据 return 到 Activity A 并在 A 中添加一个新列表,这意味着 Activity A 现在应该有 2 个列表。我怎样才能做到这一点?
save.setOnClickListener(new View.OnClickListener() { // if save button clicked
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
project1 = Project2.getSelectedItem().toString();
description = Description.getText().toString();
progress = seekBar.getProgress();
timeIn = TimeIn.getText().toString();
timeOut = TimeOut.getText().toString();
if(mClickedPosition==-1)
{
Add(project1,description,progress,timeIn,timeOut);
}
else
{
Update(project1, description, progress, timeIn, timeOut);
}
returnIntent.putExtra("project1", project1);
returnIntent.putExtra("description", description);
returnIntent.putExtra("progress", progress);
returnIntent.putExtra("timeIn", timeIn);
returnIntent.putExtra("timeOut", timeOut);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
});
Activity上Activity结果
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Activity B and populate ListView A
if (resultCode == Activity.RESULT_OK) {
if (requestCode == PROJECT_REQUEST_CODE) {
ReceiveProject = data.getStringExtra("project1");
ReceiveDescription = data.getStringExtra("description");
ReceiveProgress = data.getIntExtra("progress", 0);
ReceiveTimeIn = data.getStringExtra("timeIn");
ReceiveTimeOut = data.getStringExtra("timeOut");
Toast.makeText(getActivity(),ReceiveProject+ReceiveDescription+ReceiveProgress+ReceiveTimeIn+ReceiveTimeOut,Toast.LENGTH_LONG).show();
if(mClickedPosition==-1)
{ // add list
HashMap<String, String> clickedItem = new HashMap<>();
clickedItem.put(Configs.TAG_PROJECT, ReceiveProject);
clickedItem.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
clickedItem.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
clickedItem.put(Configs.TAG_IN, ReceiveTimeIn);
clickedItem.put(Configs.TAG_OUT, ReceiveTimeOut);
EditDetails.add(clickedItem);
((BaseAdapter) adapter).notifyDataSetChanged();
}
else
{ // update list
HashMap<String, String> clickedItem =EditDetails.get(mClickedPosition);
clickedItem.put(Configs.TAG_PROJECT, ReceiveProject);
clickedItem.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
clickedItem.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
clickedItem.put(Configs.TAG_IN, ReceiveTimeIn);
clickedItem.put(Configs.TAG_OUT, ReceiveTimeOut);
((BaseAdapter) adapter).notifyDataSetChanged();
}
//((BaseAdapter) adapter).notifyDataSetChanged();
}
}
}
}
Now I can see a new list added in Activity A. But when I click the new list and go to Activity B, no data are passed. But if I click the old list, I can see data passed...
您需要在List中添加或更新新数据,然后调用notifiDataSetChanged()
;
将 activity A 的 onActivity 结果方法中的代码更改为如下 -
HashMap<String, String> item = new HashMap<>();
item.put(Configs.TAG_PROJECT, ReceiveProject);
item.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
item.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
item.put(Configs.TAG_IN, ReceiveTimeIn);
item.put(Configs.TAG_OUT, ReceiveTimeOut);
if(mClickedPosition==-1)
{ // add list
EditDetails.add(item);
}
else
{ // update list
EditDetails.remove(mClickedPosition);
mEventsList.add(mClickedPosition,item)
}
((BaseAdapter) adapter).notifyDataSetChanged();