编辑ListView控件值 [英] Edit listView value
问题描述
我有3个活动,A,B和C.The活动的流程是从A到B那么C.从C,所有的图像和值将返回到B然后A.所有返回的价值和形象将是加载的ListView
A.
的的ListView
是点击,一旦点击,就会意图
到B做一些版本。但现在的问题是,当我编辑在B中的文本值并返回到A,我得到更新老一新的列表,而不是。
什么是错在这里?任何人都可以帮忙吗?
活动ç
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.image_fit_screen);
selectImage();
B =(ImageView的)findViewById(R.id.imageView3);
T =(EditText上)findViewById(R.id.editText38);
取消=(按钮)findViewById(R.id.button15);
OK =(按钮)findViewById(R.id.button16); cancel.setOnClickListener(新View.OnClickListener()
{
公共无效的onClick(查看为arg0){
完();
}
}); ok.setOnClickListener(新View.OnClickListener()
{//返回到B
公共无效的onClick(查看arg0中)
{
意图returnIntent =新的Intent();
。文字= t.getText()的toString();
b.setDrawingCacheEnabled(真);
b.measure(View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED));
b.layout(0,0,b.getMeasuredWidth(),b.getMeasuredHeight());
b.buildDrawingCache(真);
returnIntent.putExtra(文字,文本);
如果(b.getDrawingCache()!= NULL){
位图的位图= Bitmap.createBitmap(b.getDrawingCache());
如果(位图== NULL){
Log.e(TAG,getDrawingCache()==空);
}
Global.img =位图;
}
的setResult(Activity.RESULT_OK,returnIntent);
完();
}
});
}
活动B
的ImageButton ImageButton的;
ImageView的viewImage;
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.project);
TXT =(EditText上)findViewById(R.id.editText36);
TXT1 =(的TextView)findViewById(R.id.textView57);
按钮B =(按钮)findViewById(R.id.button17);
addListenerOnButton();
viewImage =(ImageView的)findViewById(R.id.imageView2); 如果(getIntent()。getExtras()!= NULL){//如果已经从一个值通
最后弦乐金额= getIntent()getExtras()的getString(结果)。;
最后弦乐说明1 = getIntent()getExtras()的getString(说明)。; txt1.setText(说明1);
txt.setText(金额);
} b.setOnClickListener(新View.OnClickListener(){//回归A
公共无效的onClick(查看为arg0){
意图returnIntent =新的Intent();
A =项目;
。文字= txt.getText()的toString(); //量
returnIntent.putExtra(文字,文本);
returnIntent.putExtra(一,一);
returnIntent.putExtra(C,C);
的setResult(Activity.RESULT_OK,returnIntent);
完();
}
});
viewImage.setImageBitmap(Global.img); } 公共无效addListenerOnButton(){
的ImageButton =(的ImageButton)findViewById(R.id.imageButton);
imageButton.setOnClickListener(新View.OnClickListener(){ @覆盖
公共无效的onClick(查看为arg0){
Global.img = NULL;
意图I =新意图(B.this,C.class);
startActivityForResult(I,PROJECT_REQUEST_ code);
} }); } 公共无效的onActivityResult(INT申请code,INT结果code,意图数据)
{
如果(要求code == PROJECT_REQUEST_ code){//收到FOMÇ
如果(数据= NULL&放大器;!&安培; data.hasExtra(文本)){
C = data.getStringExtra(文字);
txt1.setText(C);
viewImage.setImageBitmap(Global.img); //从C图像可以在这里显示
}
}
否则,如果(要求code == CAMERA_REQUEST_ code)
{ }
}}
活动A
公共类Claims1扩展片段{ ListView的listV;
字符串描述;
字符串结果=;
字符串名称;
只要= 0;
的TextView℃;
ImageView的伏;
ArrayAdapter<串GT;适配器;
ArrayList的<串GT; m_listItems =新的ArrayList<串GT;();
字符串文本; 公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
super.onCreate(savedInstanceState);
捆绑包= this.getArguments();
setHasOptionsMenu(真);
查看索赔= inflater.inflate(R.layout.receipt_text,集装箱,FALSE);
V =(ImageView的)claims.findViewById(R.id.imageView4);
listV =(ListView控件)claims.findViewById(R.id.listView1);
android.support.v7.app.ActionBar myActionBar =((AppCompatActivity)getActivity())getSupportActionBar();
myActionBar.setHomeButtonEnabled(真);
ImageView的ImageView的=新ImageView的(myActionBar.getThemedContext());
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setImageResource(R.mipmap.create);
适配器=新ArrayAdapter<串GT;(getActivity(),R.layout.claims,R.id.textView1,m_listItems); android.support.v7.app.ActionBar.LayoutParams的LayoutParams =新android.support.v7.app.ActionBar.LayoutParams(
android.support.v7.app.ActionBar.LayoutParams.WRAP_CONTENT,
android.support.v7.app.ActionBar.LayoutParams.WRAP_CONTENT,Gravity.RIGHT
| Gravity.CENTER_VERTICAL); //在操作栏图标
layoutParams.rightMargin = 40;
imageView.setLayoutParams(的LayoutParams);
myActionBar.setCustomView(ImageView的); listV.setOnItemClickListener(新AdapterView.OnItemClickListener(){
公共无效onItemClick(适配器视图<>的ListView,观景,
INT位置,长的id){
如果(name.equals(项目)){
意向意图=新意图(Claims1.this.getActivity(),B.class);
intent.putExtra(位图,真正的);
intent.putExtra(名,名);
intent.putExtra(结果,结果);
startActivityForResult(意向,0);
} }
});
返回索赔;
} @覆盖
公共无效onCreateOptionsMenu(菜单菜单,MenuInflater气筒){
inflater.inflate(R.menu.my_menu,菜单);
super.onCreateOptionsMenu(菜单,充气器); } @覆盖
公共布尔onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.create1:
AlertDialogRadio();
返回true;
}
回报(super.onOptionsItemSelected(项目));
}
公共无效AlertDialogRadio(){
最终的CharSequence [] = ClaimsModel {B,汽油}; AlertDialog.Builder alt_bld =新AlertDialog.Builder(getActivity());
alt_bld.setTitle(选择一个类);
alt_bld.setSingleChoiceItems(ClaimsModel,-1,新DialogInterface
.OnClickListener(){ 公共无效的onClick(DialogInterface对话,诠释项){
如果(项目== 0){
意向意图=新意图(getActivity()getApplicationContext(),B.class。);
startActivityForResult(意向,0);
}否则如果(项目== 1){
意向意图=新意图(getActivity()getApplicationContext(),Petrol.class。);
startActivityForResult(意向,1);
}
dialog.dismiss(); }
});
AlertDialog警报= alt_bld.create();
alert.show();
} @覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){ 开关(要求code){
情况下0:
结果= data.getStringExtra(文字);
名称= data.getStringExtra(一);
说明= data.getStringExtra(C);
如=的Long.parseLong(结果);
Log.d(第一,结果是:+结果);
文本=+姓名++RM+结果+;
m_listItems.add(文本);
adapter.notifyDataSetChanged();
listV.setAdapter(适配器); 打破; 情况1:
结果= data.getStringExtra(文字);
名称= data.getStringExtra(一);
说明= data.getStringExtra(C);
如果(Global.img!= NULL){
v.setImageBitmap(Global.img);
}
如=的Long.parseLong(结果);
c.setText(+姓名+------+RM+结果);
打破;
} }
编辑
在A增加一个全局变量 - 私人诠释mClickedPosition
;
添加 mClickedPosition =位置;
在OnItemClick
然后
@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){ 开关(要求code){
情况下0:
结果= data.getStringExtra(文字);
名称= data.getStringExtra(一);
说明= data.getStringExtra(C);
如=的Long.parseLong(结果);
Log.d(第一,结果是:+结果);
文本=+姓名++RM+结果+;
m_listItems.set(mClickedPosition,文本);
adapter.notifyDataSetChanged();
listV.setAdapter(适配器); 打破;
18 11-16:15:54.751 23044-23044 / com.example.project.project
E / AndroidRuntime:致命异常:主要
工艺:com.example.project.project,PID:23044
了java.lang.RuntimeException:不提供结果ResultInfo {谁=安卓片段:0,请求= 0,结果= -1,数据= {意向
(有临时演员)}}到活动
{com.example.project.project / com.example.project.project.MainActivity}:
java.lang.IndexOutOfBoundsException:无效指数为0,大小为0
在android.app.ActivityThread.deliverResults(ActivityThread.java:3681)
在android.app.ActivityThread.handleSendResult(ActivityThread.java:3724)
块引用>m_listItems.set(mClickedPosition,文本);
解决方案尝试编辑code是这样的:
0的情况:
结果= data.getStringExtra(文字);
名称= data.getStringExtra(一);
说明= data.getStringExtra(C);
如=的Long.parseLong(结果);
Log.d(第一,结果是:+结果);
文本=+姓名++RM+结果+;
如果(m_listItems.size()== 0){
m_listItems.add(文本);
}其他{
m_listItems.set(mClickedPosition,文本);
}
adapter.notifyDataSetChanged();
listV.setAdapter(适配器); 打破;I have 3 activities, A, B and C.The flow of activity is from A to B then C. From C, all the images and value will be returned to B then A. All the returned value and image will be loaded in
listView
A.The
listView
is clickable and once it is clicked, it willintent
to B to do some edition. But the problem now is when I edit the text value in B and return to A, I get a new list instead of updating the old one. What's wrong here ? Anyone can help?Activity C
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.image_fit_screen); selectImage(); b = (ImageView) findViewById(R.id.imageView3); t = (EditText) findViewById(R.id.editText38); cancel=(Button)findViewById(R.id.button15); ok=(Button)findViewById(R.id.button16); cancel.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { finish(); } }); ok.setOnClickListener(new View.OnClickListener() { // return to B public void onClick(View arg0) { Intent returnIntent=new Intent(); text=t.getText().toString(); b.setDrawingCacheEnabled(true); b.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); b.layout(0, 0, b.getMeasuredWidth(), b.getMeasuredHeight()); b.buildDrawingCache(true); returnIntent.putExtra("text", text); if (b.getDrawingCache() != null) { Bitmap bitmap = Bitmap.createBitmap(b.getDrawingCache()); if (bitmap == null) { Log.e("TAG", "getDrawingCache() == null"); } Global.img = bitmap; } setResult(Activity.RESULT_OK, returnIntent); finish(); } }); }
Activity B
ImageButton imageButton; ImageView viewImage; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.project); txt = (EditText) findViewById(R.id.editText36); txt1=(TextView)findViewById(R.id.textView57); Button b = (Button) findViewById(R.id.button17); addListenerOnButton(); viewImage = (ImageView) findViewById(R.id.imageView2); if(getIntent().getExtras()!=null) { //if has value pass from A final String Amount = getIntent().getExtras().getString("result"); final String description1 = getIntent().getExtras().getString("description"); txt1.setText(description1); txt.setText(Amount); } b.setOnClickListener(new View.OnClickListener() { // return to A public void onClick(View arg0) { Intent returnIntent = new Intent(); a = "Project"; text = txt.getText().toString(); // amount returnIntent.putExtra("text", text); returnIntent.putExtra("a", a); returnIntent.putExtra("c", c); setResult(Activity.RESULT_OK, returnIntent); finish(); } }); viewImage.setImageBitmap(Global.img); } public void addListenerOnButton() { imageButton = (ImageButton) findViewById(R.id.imageButton); imageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { Global.img=null; Intent i = new Intent(B.this,C.class); startActivityForResult(i, PROJECT_REQUEST_CODE); } }); } public void onActivityResult(int requestCode,int resultCode, Intent data) { if(requestCode==PROJECT_REQUEST_CODE) { // receive fom C if(data!=null&&data.hasExtra("text")) { c = data.getStringExtra("text"); txt1.setText(c); viewImage.setImageBitmap(Global.img); // image from C can be shown here } } else if (requestCode==CAMERA_REQUEST_CODE) { } } }
Activity A
public class Claims1 extends Fragment { ListView listV; String description; String result=""; String name; long as=0; TextView c; ImageView v; ArrayAdapter<String> adapter; ArrayList<String> m_listItems = new ArrayList<String>(); String Text; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = this.getArguments(); setHasOptionsMenu(true); View claims = inflater.inflate(R.layout.receipt_text, container, false); v=(ImageView)claims.findViewById(R.id.imageView4); listV = (ListView) claims.findViewById(R.id.listView1); android.support.v7.app.ActionBar myActionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); myActionBar.setHomeButtonEnabled(true); ImageView imageView = new ImageView(myActionBar.getThemedContext()); imageView.setScaleType(ImageView.ScaleType.CENTER); imageView.setImageResource(R.mipmap.create); adapter=new ArrayAdapter<String>(getActivity(),R.layout.claims,R.id.textView1,m_listItems); android.support.v7.app.ActionBar.LayoutParams layoutParams = new android.support.v7.app.ActionBar.LayoutParams( android.support.v7.app.ActionBar.LayoutParams.WRAP_CONTENT, android.support.v7.app.ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL); // for icon in action bar layoutParams.rightMargin = 40; imageView.setLayoutParams(layoutParams); myActionBar.setCustomView(imageView); listV.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> listView, View view, int position, long id) { if(name.equals("Project")) { Intent intent = new Intent(Claims1.this.getActivity(), B.class); intent.putExtra("bitmap",true); intent.putExtra("name",name); intent.putExtra("result",result); startActivityForResult(intent,0); } } }); return claims; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.my_menu, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.create1: AlertDialogRadio(); return true; } return (super.onOptionsItemSelected(item)); } public void AlertDialogRadio() { final CharSequence[] ClaimsModel = {"B", "Petrol"}; AlertDialog.Builder alt_bld = new AlertDialog.Builder(getActivity()); alt_bld.setTitle("Select a Class"); alt_bld.setSingleChoiceItems(ClaimsModel, -1, new DialogInterface .OnClickListener() { public void onClick(DialogInterface dialog, int item) { if (item == 0) { Intent intent = new Intent(getActivity().getApplicationContext(),B.class); startActivityForResult(intent, 0); } else if (item == 1) { Intent intent = new Intent(getActivity().getApplicationContext(), Petrol.class); startActivityForResult(intent, 1); } dialog.dismiss(); } }); AlertDialog alert = alt_bld.create(); alert.show(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 0: result = data.getStringExtra("text"); name = data.getStringExtra("a"); description = data.getStringExtra("c"); as = Long.parseLong(result); Log.d("FIRST", "result:"+result); Text=" "+name+" "+"RM"+result+""; m_listItems.add(Text); adapter.notifyDataSetChanged(); listV.setAdapter(adapter); break; case 1: result = data.getStringExtra("text"); name = data.getStringExtra("a"); description = data.getStringExtra("c"); if (Global.img != null) { v.setImageBitmap(Global.img); } as = Long.parseLong(result); c.setText(" " + name + "------" + "RM " + result); break; } }
Edited
Add a global variable in A -
private int mClickedPosition
; AddmClickedPosition = position;
in OnItemClickthen
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 0: result = data.getStringExtra("text"); name = data.getStringExtra("a"); description = data.getStringExtra("c"); as = Long.parseLong(result); Log.d("FIRST", "result:"+result); Text=" "+name+" "+"RM"+result+""; m_listItems.set(mClickedPosition,Text); adapter.notifyDataSetChanged(); listV.setAdapter(adapter); break;
11-16 18:15:54.751 23044-23044/com.example.project.project E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.project.project, PID: 23044 java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:0, request=0, result=-1, data=Intent { (has extras) }} to activity {com.example.project.project/com.example.project.project.MainActivity}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at android.app.ActivityThread.deliverResults(ActivityThread.java:3681) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3724)
m_listItems.set(mClickedPosition,Text);
解决方案Try edit your code like this:
case 0: result = data.getStringExtra("text"); name = data.getStringExtra("a"); description = data.getStringExtra("c"); as = Long.parseLong(result); Log.d("FIRST", "result:"+result); Text=" "+name+" "+"RM"+result+""; if (m_listItems.size() == 0) { m_listItems.add(Text); } else { m_listItems.set(mClickedPosition,Text); } adapter.notifyDataSetChanged(); listV.setAdapter(adapter); break;
这篇关于编辑ListView控件值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!