2014-01-10 7 views
0

Я не понимаю это. Я пытаюсь использовать transaction.replace для замены одного фрагмента на другой, используя arrayAdapter. Значение в массиве - com.example.package.fragment-address. Но я не могу понять, как фактически заменить фрагмент.Как заменить фрагмент из массива

Если я пытаюсь использовать код ниже этих линий:

FragmentTransaction transaction = getFragmentManager() 
       .beginTransaction(); 
     transaction.replace(R.id.fragment_container, Fragment.instantiate(this, getResources().getStringArray(R.array.adressLista[position]))); 
     transaction.commit(); 

Я получаю «Тип выражения должен быть типом массива, но он решил ИНТ». Но если я использую тот же R.array заменить текст в TextView, как это:

TextView infoText = (TextView) getActivity().findViewById(R.id.fragmentTextView); 
     infoText.setText(getResources().getStringArray(R.array.adressLista)[position]); 

Затем текст, отображаемый является com.example. адрес. Как заменить фрагмент?

коды: VisaFragment (Ошибка на 11-й строке снизу):

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class VisaFragment extends Fragment { 

    static final String ARG_POSITION = "position"; 
    int mCurrentPosition = -1; 

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

     if (savedInstanceState != null){ 
      mCurrentPosition = savedInstanceState.getInt(ARG_POSITION); 
     } 

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

    @Override 
    public void onStart(){ 
     super.onStart(); 
System.out.println("VisaFragment onStart");  

     Bundle argument = getArguments(); 
     if (argument != null){ 
      visaFragmentArgument(argument.getInt(ARG_POSITION)); 
     }else if (mCurrentPosition != -1){ 
      visaFragmentArgument(mCurrentPosition); 
     } 
    } 

    public void visaFragmentArgument(int position) { 
System.out.println("VisaFragment VisaFragmentArgument"); 

     FragmentTransaction transaction = getFragmentManager() 
       .beginTransaction(); 
     transaction.replace(R.id.fragment_container, Fragment.instantiate(this, getResources().getStringArray(R.array.adressLista[position]))); 
     transaction.commit(); 
     } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 

     outState.putInt(ARG_POSITION, mCurrentPosition); 
    } 
} 

MenyFragment:

import android.app.Activity; 
    import android.os.Bundle; 
    import android.support.v4.app.ListFragment; 
    import android.view.View; 
    import android.widget.ArrayAdapter; 
    import android.widget.ListView; 

    public class MenyFragment extends ListFragment{ 

     onMenyKnappClickListener mCallback; 
     public interface onMenyKnappClickListener { 
      public void onMenyKnappVald (int position); 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

    System.out.println("MenyFragment onCreate"); 
      int layout = android.R.layout.simple_list_item_1; 
      setListAdapter (new ArrayAdapter<String>(getActivity(), layout, getResources().getStringArray(R.array.menyLista))); 
     } 

     @Override 
     public void onListItemClick(ListView l, View v, int position, long id) { 
    System.out.println("MenyFragment onListItemClick");  
      mCallback.onMenyKnappVald(position); 
      getListView().setItemChecked(position, true); 
     } 

     @Override 
     public void onStart() { 
      super.onStart(); 
      System.out.println("MenyFragment onStart"); 
      if (getFragmentManager().findFragmentById(R.id.fragment_container_stor) !=null){ 
       getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
       } 
     } 

     @Override 
     public void onAttach(Activity activity) { 
      super.onAttach(activity); 
    System.out.println("MenyFragment onAttach"); 
      try { 
       mCallback =(onMenyKnappClickListener) activity; 
      } catch (ClassCastException e) { 
       throw new ClassCastException(activity.toString() + " Måste implementera onMenyKnappClickListener"); 
      } 
     } 
} 

MainActivity:

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 

public class MainActivity extends FragmentActivity implements MenyFragment.onMenyKnappClickListener{ 

    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
System.out.println("MainActivity onCreate"); 
     setContentView(R.layout.activity_main); 

     if (findViewById(R.id.fragment_container_liten) != null){ 
      if (savedInstanceState != null){ 
       return; 
      } 

      MenyFragment menyFragment = new MenyFragment(); 
      menyFragment.setArguments(getIntent().getExtras()); 
      getSupportFragmentManager().beginTransaction() 
      .add(R.id.fragment_container, menyFragment).commit(); 
     } 
    } 

    public void onMenyKnappVald (int position){ 
System.out.println("MainActivity onMenyKnappVald"); 

    VisaFragment visaFrag = (VisaFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_container); 

    if (visaFrag != null) { 
     visaFrag.visaFragmentArgument(position); 

    }else{ 
     VisaFragment nyttFragment = new VisaFragment(); 
     Bundle argument = new Bundle(); 

     argument.putInt(VisaFragment.ARG_POSITION, position); 
     nyttFragment.setArguments(argument); 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.fragment_container, nyttFragment); 
     transaction.addToBackStack(null); 
     transaction.commit(); 
    } 


    } 

} 

activity_main.XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:baselineAligned="false" 
    android:orientation="horizontal"  
    android:background="@color/menyBGColor" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment android:name="com.example.exempelfragmentsgrund.MenyFragment" 
       android:id="@+id/meny_fragment" 
       android:layout_weight="1" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" /> 

    <fragment android:name="com.example.exempelfragmentsgrund.VisaFragment" 
       android:id="@+id/fragment_container" 
       android:layout_weight="3" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" /> 

</LinearLayout> 

ответ

0

Вы видите, что у вас есть

getResources().getStringArray(R.array.adressLista[position]) 

в первом, а затем в TextView вещи это

getResources().getStringArray(R.array.adressLista)[position] 

Таким образом, вы только должны переместить эту [position] вне от метода getStringArray.

В строке getResources().getStringArray(R.array.adressLista[position]) выдается сообщение об ошибке, поскольку getStringArray принимает параметр int, и вы пытаетесь использовать R.array.adressLista, как будто это массив, но это целое число, которое ссылается на массив в ваших values.xml.

+0

Если я сделаю это, я получаю: «Метод Instantiate (Context, String) в типе фрагмента не применяется для аргументов (VisaFragment, String)» – Sluggo

+0

Попробуйте заменить ' this' с 'getActivity()' – vilpe89

+0

Итак, это будет выглядеть так: 'transaction.replace (R.id.fragment_container, Fragment.instantiate (getActivity(), getResources(). getStringArray (R.array.adressLista) [позиция ])); ' – vilpe89

0
Fragment.instantiate(this, getResources().getStringArray(R.array.adressLista[position]))); 

getResources().getStringArray() возвращает int [] и ваш выше фрагмент кода будет возвращать int. SetText имеет два варианта, так что работает: setText(int)setText(String)

+0

Хорошо, поэтому я все еще могу использовать setText, но не transaction.replace. Поскольку значение массива является текстом, я полагаю, что этот int ссылается на значение id? – Sluggo

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