2015-11-16 2 views
1

У меня есть 3 действия, A, B и C. Поток активности от A до B, а затем C. С C все изображения и значение будут возвращены в B тогда A. Все возвращаемое значение и изображение будет загружено в listView A.Редактировать listView value

listView можно щелкнуть, и после его нажатия будет intent, чтобы сделать некоторое издание. Но теперь проблема заключается в том, когда я редактирую текстовое значение в B и возвращаюсь к A, я получаю новый список вместо обновления старого. Что здесь не так? Кто-нибудь может помочь?

активность С

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(); 
      } 
     }); 
    } 

активность Б

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) 
     { 

     } 
    } 

} 

активность

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; 
     } 

    } 

Отредактировано

Добавить глобальную переменную в A - private int mClickedPosition; Добавить mClickedPosition = position; в OnItemClick

затем

@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: неустранимым: главный Процесс: com.example.project.project, PID: 23044 java.lang.RuntimeException: Ошибка доставки результата ResultInfo {who = android: fragment: 0, request = 0, result = -1, data = Intent { (есть дополнительные функции)} } к действию {com.example.project.project/com.example.project.pro ject.MainActivity}: java.lang.IndexOutOfBoundsException: недействительный индекс 0, размер 0 в android.app.ActivityThread.deliverResults (ActivityThread.java:3681) в android.app.ActivityThread.handleSendResult (ActivityThread.java:3724)

m_listItems.set(mClickedPosition,Text); 
+1

Ваше описание, кажется, вводит в заблуждение. Из класса A вы переходите к B не к C. Цитируя вас: _ «Поток активности от A до C», «Пожалуйста, снова прочитайте ваше описание и отредактируйте любые вводящие в заблуждение заявления. – abbath

+1

предоставить больше кода с адаптером для listview –

+1

Новый список? Значит что? Разве вы не хотите, чтобы список обновлялся?Объясните свою проблему, чтобы мы могли помочь вам – Abx

ответ

0

Попробуйте изменить свой код так:

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; 
+0

Подождите ... Теперь я только могу обновить список. Как добавить новый список – John

+0

Я хочу добавить и обновить – John

+0

, см. Http://stackoverflow.com/questions/33741464/how-to-update-and -add-а-новый-список-в-ListView/33741634 # 33741634 – John

2

в вашей деятельности onActivityResult метод, когда вы возвращаетесь из деятельности B после редактирования вы добавляете новый элемент в ArrayList, используя этот код m_listItems.add(Text);

вместо добавления нового элемента обновить список массива, используя этот код

m_listItems.set(position Text); 
+1

'm_listItems.set (позиция Текст); 'или' m_listItems.set (position, Text); ' – John

+0

@John, если вы хотите обновить список массивов обновлений адаптера, не добавляйте новый элемент в список массивов –

+0

Нужно ли создавать позицию как глобальную переменную? – John