0

В одном из моих проектов я использую 2 фрагмента. Один фрагмент отображает список элементов. Так что, когда тема будет выбрана в первом фрагменте, детали должны быть изменены в другом фрагменте. Я могу перейти от одного фрагмента к другому, но представление не изменяется. В каком методе я должен реализовать представление второго фрагмента, чтобы он мог соответственно измениться. Пожалуйста, дайте мне хороший учебник или пример для них.Передача данных из одного фрагмента в следующий фрагмент в android

Здесь я должен разработать один пример андроида, я должен запустить приложение, а также отобразить название категории в горизонтальном списке моего первого фрагмента. Мне нужно щелкнуть любую категорию, чтобы передать имя категории во втором фрагменте. Пожалуйста, дайте мне решение этой проблемы.

Я использовал ниже код:

public class Home extends FragmentActivity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

первый фрагмент кода:

public class MainActivity extends Fragment { 
static final String URL = "http://dev2.mercuryminds.com/webservices/new_feed_articls.xml"; 

static String KEY_CATEGORY = "Categories"; 

static final String KEY_TITLE = "Category"; 
LazyAdapter adapter; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_main, 
       container, false); 


    final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 
    XMLParser parser = new XMLParser(); 
     String xml = parser.getXmlFromUrl(URL); // getting XML from URL 
     Document doc = parser.getDomElement(xml); // getting DOM element 

     NodeList nl = doc.getElementsByTagName(KEY_TITLE); 


     // looping through all song nodes &lt;song&gt; 
     for (int i = 0; i < nl.getLength(); i++) { 
      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String> (); 
      Element e = (Element) nl.item(i); 
      map.put(KEY_TITLE,((Element)nl.item(i)).getAttribute("name")); 

      // map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); 
      songsList.add(map); 
     } 
     HorizontalListView list = (HorizontalListView) view.findViewById(R.id.listView1); 
    adapter = new LazyAdapter(getActivity(), songsList); 
     list.setAdapter(adapter); 

     list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      HashMap<String, String> map = songsList.get(position); 
      Intent in = new Intent(); 
      in.setClass(getActivity(), SubCate.class); 
      // in.putExtra(KEY_TITLE, map.get(KEY_TITLE)); 

        startActivity(in); 
     } 

    }); 
     return view; 
    }} 

Как я могу отобразить название категории на 2-ой деятельности ... пожалуйста, дайте мне код для этих ...

EDIT:

Привет я изменил с ода, как на моей первой деятельности:

HashMap<String, String> map = songsList.get(position); 
      SubCate frag = (SubCate) getFragmentManager().findFragmentById(R.id.frag_2); 
      if (frag != null && frag.isInLayout()) { 
      frag.setText(getCapt(map)); 
      } 
      } 
      private String getCapt(HashMap<String, String> map) { 
      if (map.containsValue("notchbolly")) { 
      return "dadad"; 
      } 
       return "veeman"; 

на следующей деятельности:

public void setText(String item) { 
TextView view = (TextView) getView().findViewById(R.id.cate); 
view.setText(item); 
    } 

его woked хорошо, а прямо упоминать имя на если (map.containsValue ("notchbolly")), но я должен. отобразите имя без упоминания имени напрямую. Если мне нужно щелкнуть любую категорию, это означает, что название категории отображается на следующем фрагменте. Как я могу это сделать ?????

ответ

1

Используя метод интерфейса можно передавать данные между фрагментом фрагментировать

В Fragmenta создать интерфейс и посылать данные на этот интерфейс и реализовать этот метод интерфейса в fragmentB и получить необходимые данные

следующий код полезен для u

Код в FragmentA:

public class FragmentA extends Fragment { 

    // interface method 
    public InterfaceDataCommunicatorBetweenfragmentAToFragmentB  iInterfaceDataCommunicatorBetweenfragmentAToFragmentB; 

    // Data to send 
    String mDataString; 

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

     // use this line where u send data 
     iInterfaceDataCommunicatorBetweenfragmentAToFragmentB.upDatedData(mDataString); 

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


     return view ; 
    } 

    /** 
     * Interface method to send data to fragmentB 
     * 
     */ 
     public interface InterfaceDataCommunicatorBetweenfragmentAToFragmentB          { 
      public void upDatedData(String data); 

     } 
    } 

Код в FragmentB:

class FragmentB extends Fragment implements InterfaceDataCommunicatorBetweenfragmentAToFragmentB { 

    // interface method 
    public InterfaceDataCommunicatorBetweenfragmentAToFragmentB iInterfaceDataCommunicatorBetweenfragmentAToFragmentB; 

    // fragmentA data 
    String mgetUpdatedData 


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


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


     return view ; 
    } 

    /** 
    * Interface method coming from fragment a to fragmentB after implement interface in fragmentB 
    */ 
    public void upDatedData(String data) { 
     this.mgetUpdatedData = data; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     // TODO Auto-generated method stub 
     super.onAttach(activity); 
     try { 
      iInterfaceDataCommunicatorBetweenfragmentAToFragmentB = (InterfaceDataCommunicatorBetweenfragmentAToFragmentB) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement interface"); 
     } 

    }