2016-11-14 7 views
1

MainActivity beim Start fügen Relativeview ein Fragmentlayout hinzu, dann sende ich ein Datenfragment, um es ExpandablelistView hinzuzufügen, aber meine App zeigt mir Fehler, der ExpandablelistView nicht erkennen konnte.Zugriff auf ExpandablelistView im Fragment

MainActivity:

public class MainActivity extends AppCompatActivity implements FragmentAddCatergory.onClickButtonListener { 
private FragmentManager manager; 
private FragmentTransaction transactionShowList; 
private FragmentTransaction transactionAddCatergory; 
private FragmentAddCatergory addCatergory; 
private FragmentShowCategory showCategory; 
private boolean addcategory; 
private TextView txtAddCategory; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    manager = getFragmentManager(); 
    transactionShowList = manager.beginTransaction(); 
    showCategory = new FragmentShowCategory(); 
    addCatergory=new FragmentAddCatergory(); 
    transactionShowList.add(R.id.Fragment_container, showCategory); 
    transactionShowList.commit(); 
    addcategory=false; 
    txtAddCategory = (TextView) findViewById(R.id.txtaddcategory); 
    txtAddCategory.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ChangeFragment(); 
     } 
    }); 
} 

public void ChangeFragment(){ 
    transactionAddCatergory=manager.beginTransaction(); 
    if (addcategory){ 
     transactionAddCatergory.replace(R.id.Fragment_container,addCatergory); 
     txtAddCategory.setText("Do you want to see your List?Show me!"); 
     addcategory=false; 
    }else{ 
     transactionAddCatergory.replace(R.id.Fragment_container,showCategory); 
     txtAddCategory.setText("Do you want to add a Category?Create One"); 
     addcategory=true; 
    } 
    transactionAddCatergory.commit(); 
} 

@Override 
public void ClickButton(String group, String child) { 
    FragmentShowCategory a=new FragmentShowCategory(); 
    a.showExpand(this,group,child); 
}} 

in letzten i obigem Code mache Objekt aus dem ersten Fragmente und Daten senden und in folgendem Code ist der Code des ersten Fragments

public class FragmentShowCategory extends Fragment { 
private View view; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    view = inflater.inflate(R.layout.activity_expandable_list_view, container, false); 
    return view; 
} 

public void showExpand(Context context, String g, String c) { 
    Toast.makeText(context, g + " is " + c, Toast.LENGTH_LONG).show(); 
    HashMap<String, List<String>> carsDetails = DataProvider.getInfo(g, c); 
    List<String> carsBrands = new ArrayList<String>(carsDetails.keySet()); 
    ItemClass adapter = new ItemClass(context, carsDetails, carsBrands); 
    ExpandableListView list = (ExpandableListView) view.findViewById(R.id.expandList); 
    list.setAdapter(adapter); 
}} 

aber wenn ich laufe meinen app, Ich bekomme Fehler, dass ich nicht weiß, warum in Zeile:

ExpandableListView Liste = (ExpandableListView) view.findViewById (R.id.expandList);

ich würde mich freuen, mir zu helfen.

Antwort

0

Die Ansichtshierarchie Ihres Fragments wird nicht automatisch aufgeblasen, nur weil Sie eine Instanz Ihres Fragments erstellt haben, wie Sie es in ClickButton tun. Die onCreateView() Methode, die zuerst aufgerufen werden muss, um Ihre Ansichten aufzublasen, ist Teil der fragment's lifecycle. Du solltest Android dein Fragment instanziieren lassen und seine Instanz über die FragmentManager erwerben.

This tutorial erklärt Grundlagen über Fragmente sehr gut.