2014-10-25 2 views
0

У меня есть ListFragment с данными из JSON. Когда я нажимаю элемент списка, данные отправляются на фрагмент (DetalhesFragment.java). Если пользователь подтвердит данные, он нажмет кнопку в DetalhesFragment, чтобы отправить эту информацию в другой список справа от основной активности (PedidosFragment.java).Невозможно добавить несколько строк в Listview на фрагменте

Это работает! Данные из среднего фрагмента отображаются в первой строке списка на PedidosFragment. Но, если я попытаюсь выбрать другой элемент для отправки туда, строка будет перезаписана новыми данными. Не добавляйте строку под первой строкой.

Вы можете мне помочь, ребята? Здесь, коды ..

DetalhesFragment.java

package com.example.waitersoriginal; 

import android.app.Fragment; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsoluteLayout; 
import android.widget.Button; 
import android.widget.TextView; 

public class DetalhesFragment extends Fragment implements OnClickListener{ 

    TextView nomeEntrada,descrEntrada,valorEntrada,nmArm,dsArm,vlArm; 
    String txtNome, txtDescr; 
    View view; 

    @Override 
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { 

     view = inflater.inflate(R.layout.detalhes_fragment, container, false); 

     Button mButton = (Button) view.findViewById(R.id.button1); 

     nomeEntrada= (TextView) view.findViewById(R.id.textView1); 
     descrEntrada= (TextView)view.findViewById(R.id.textView2); 
     valorEntrada= (TextView)view.findViewById(R.id.textView3); 

     mButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       switch (v.getId()) { 
        case R.id.button1: 

         PedidosFragment array = (PedidosFragment)getFragmentManager().findFragmentById(R.id.fragment3); 
         array.criaArray(txtNome,txtDescr); 

         break; 
       } 
      } 
     } 
      ); 
     return view; 
    }  

    public void change(String txt, String txt1){ 
     nomeEntrada.setText(txt); 
     descrEntrada.setText(txt1); 
     txtNome = txt; 
     txtDescr = txt1; 
     //valorEntrada.setText(txt2); 

    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 

    }  
} 

PedidosFragment.java

package com.example.waitersoriginal; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.HashMap; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.BaseAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.AdapterView.OnItemClickListener; 

public class PedidosFragment extends ListFragment{ 

    private ArrayList<HashMap<String, String>> listaPedidos; 

    private static final String TAG_NM = "NOME"; 
    private static final String TAG_DS = "DESCR"; 

    public PedidosFragment(){} 

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     return inflater.inflate(R.layout.pedidos_fragment, container, false); 
    } 

    void criaArray(String nomeProd, String descrProd) { 

     listaPedidos = new ArrayList<HashMap<String, String>>(); 
     HashMap<String, String> map3 = new HashMap<String, String>(); 

     ListAdapter adapter2 = new SimpleAdapter(getActivity(), listaPedidos, 
       R.layout.list_item, 
       new String[] { TAG_NM, TAG_DS}, 
       new int[] { R.id.name, R.id.pid}); 

     setListAdapter(adapter2); 

     map3.put(TAG_NM, nomeProd); 
     map3.put(TAG_DS, descrProd); 

     listaPedidos.add(map3);  

      ((BaseAdapter) adapter2).notifyDataSetChanged(); 
    } 
} 

Спасибо ..!

ответ

0

Каждый раз, когда вы переопределяете свой адаптер и каждый раз создаете новый, с новейшим элементом.

попробовать с этим (предполагаюсь, что оба фрагмента находится в памяти):

public class PedidosFragment extends ListFragment{ 

    private ArrayList<HashMap<String, String>> listaPedidos; 

    private static final String TAG_NM = "NOME"; 
    private static final String TAG_DS = "DESCR"; 



    public PedidosFragment(){} 

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 

     listaPedidos = new ArrayList<HashMap<String, String>>(); 

     ListAdapter adapter2 = new SimpleAdapter(getActivity(), listaPedidos, 
       R.layout.list_item, 
       new String[] { TAG_NM, TAG_DS}, 
       new int[] { R.id.name, R.id.pid}); 

     setListAdapter(adapter2); 


     return inflater.inflate(R.layout.pedidos_fragment, container, false); 
    } 

    void criaArray(String nomeProd, String descrProd) { 

     HashMap<String, String> map3 = new HashMap<String, String>(); 
     map3.put(TAG_NM, nomeProd); 
     map3.put(TAG_DS, descrProd); 

     listaPedidos.add(map3);  

     ((BaseAdapter) adapter2).notifyDataSetChanged(); 
    } 
} 

Кроме того, избегайте использования constructors с fragments, вместо того, чтобы использовать Bundles

Надеются, что это помогает

+0

Идеального ответа, спасибо @El Jazouli !!!! – xxxxxx

+0

добро пожаловать, рад помочь –

Смежные вопросы