2017-03-13 8 views
-3

Ich habe gerade einen benutzerdefinierten Spinner erstellt, den ich brauche, um diesen Spinner in der Symbolleiste der Aktivität zu setzen Ich habe einen Adapter erstellt .... etc aber ich habe diesen FehlerVerursacht von: java.lang.IllegalStateException: Das angegebene Kind hat bereits einen Elternteil

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

, da dies meine Tätigkeit ist

package abtech.waiteriano.com.waitrer; 

import android.app.FragmentManager; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.annotation.RequiresApi; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.SortedMap; 

import abtech.waiteriano.com.waitrer.connection_class.ConnectionClass; 
import abtech.waiteriano.com.waitrer.fragments.LVMenuFragment; 
import abtech.waiteriano.com.waitrer.fragments.MenuGridFragment; 
import abtech.waiteriano.com.waitrer.fragments.TablesFragment; 

public class MenuActivity extends AppCompatActivity { 
    private android.support.v7.widget.Toolbar toolbar; 
    private ArrayList<String> Prests_ID; 
    private ArrayList<String> Prests_Name; 
    public static String Prst_ID = "0"; 
    public static long Check_ID = 0; 
    public static int Check_Serial = 0; 
    ImageView listIcon, gridIcon; 
    boolean flag_item_grid = true; 
    RelativeLayout fire, showOrderCart; 
    String[] Menu_List = {"Senegal", "Afrique du Sud", "Kenya", "Ghana", 
      "Liberia", "Burkina Fasso", "Nigeria", "Cameroon", "Uganda", 
      "Tanzania", "Congo", "Malawi", "Zambia"}; 

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_menu); 
     Spinner menu_spinner = (Spinner) findViewById(R.id.spinner); 
     menu_spinner.setAdapter(new MyCustomAdapter(MenuActivity.this, 
       R.layout.spinner_row, Menu_List)); 
     menu_spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); 

     listIcon = (ImageView) findViewById(R.id.listicon); 
     gridIcon = (ImageView) findViewById(R.id.gridicon); 
     fire = (RelativeLayout) findViewById(R.id.fireID); 
     showOrderCart = (RelativeLayout) findViewById(R.id.cartID); 
     Prests_ID = new ArrayList<String>(); 
     Prests_Name = new ArrayList<String>(); 
     Prests_ID.add("-1"); 
     Prests_Name.add("ALL"); 
     Prst_ID = ConnectionClass.Ret_Col("Select MainCourse From OutLet_Setup Where OutLet_ID = " + ConnectionClass.OutletID); 
     if (Prst_ID.trim() == "") 
      Prst_ID = "0"; 

     String str = "Select ID,Code,Name,Name2 From Presets Where Active = 1 And Rest_ID_Active = 1 AND OutLet_ID_Active = 1 ORDER BY Code"; 
     ResultSet rs = ConnectionClass.Ret_RS(str); 
     try { 
      while (rs.next()) { 
       Prests_ID.add(rs.getString("ID")); 
       Prests_Name.add(rs.getString("Name")); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 
     Spinner navigationSpinner = new Spinner(getSupportActionBar().getThemedContext()); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Prests_Name); 
     navigationSpinner.setAdapter(adapter); 
     toolbar.addView(menu_spinner, 0); 
     int indx = -1; 
     indx = Prests_ID.indexOf(Prst_ID); 
     navigationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       Prst_ID = Prests_ID.get(position); 
       Toast.makeText(MenuActivity.this, 
         "you selected: " + Prests_ID.get(position) + " " + Prests_Name.get(position), 
         Toast.LENGTH_SHORT).show(); 
       if (flag_item_grid) { 
        FragmentManager fm = getFragmentManager(); 
        fm.beginTransaction().replace(R.id.content_frame, new MenuGridFragment()).commit(); 
       } else { 
        FragmentManager fm = getFragmentManager(); 
        fm.beginTransaction().replace(R.id.content_frame, new LVMenuFragment()).commit(); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 
     if (indx != -1) 
      navigationSpinner.setSelection(indx); 

     fire.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int i = 0; 
       for (String key : TablesFragment.Check_Items.keySet()) { 
        SortedMap<String, String> sm1 = TablesFragment.Check_Items.get(key); 
        int qty = Integer.parseInt(sm1.get("Qty")); 
        if (qty > 0) { 
         i++; 
         double Price = Double.parseDouble(sm1.get("Price")); 
         Price = qty * Price; 
         String st = "insert into ChecksItems (Check_ID,Item_ID,QTY,UnitPrice,TotalPrice,DicountValue,Tax_Value,Adj_Value,NetPrice,Serial,Fired,Fired_Time,Voided,Voided_Time,Voided_Reason,P_On_Check,Complement,Status,IsModifier,Ref_Mod_Item,IsAssimbly,Ref_Ass_Item,Taxable,NoServiceCharge,Num_Fired,Num_Print,Server_ID,P_On_Report,Check_ID_Combine,Round_Check_Fired,Void_Effect_Invn,Promo_ID,Orig_Price,Officer,Comp_Reason_ID,End_Serial_Count,Discount_ID,Disc_Reason_ID,Hold,Hold_Time,Voided_By,Comp_By,Disc_By) values (" + String.valueOf(MenuActivity.Check_ID) + "," + sm1.get("Item_ID").toString() + ",1," + sm1.get("Price").toString() + "," + Price + ",0,0,0," + Price + "," + String.valueOf(i) + ",0,GetDate(),0,GetDate(),0,'" + sm1.get("PrintOnChick").toString() + "',0,'New',0,0,0,0,'" + sm1.get("Taxable").toString() + "','" + sm1.get("NoServiceCharge").toString() + "',0,0,0,'" + sm1.get("PrintOnReport").toString() + "',0,1,0,0," + sm1.get("Price").toString() + ",0,0,0,0,0,0,GetDate(),0,0,0)"; 
         ConnectionClass.executeUpdate(st); 
        } 
       } 
       Toast.makeText(MenuActivity.this, "Fired", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     showOrderCart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(MenuActivity.this, ShowOrderActivity.class); 
       startActivity(i); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.iconmenu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(android.view.MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.searchicon: 
       // ... 
       return true; 
      case R.id.listicon: 
       FragmentManager fm = getFragmentManager(); 
       fm.beginTransaction().replace(R.id.content_frame, new LVMenuFragment()).commit(); 
       flag_item_grid = false; 
       return true; 
      case R.id.gridicon: 
       // ... 
       fm = getFragmentManager(); 
       fm.beginTransaction().replace(R.id.content_frame, new MenuGridFragment()).commit(); 
       flag_item_grid = true; 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    public class MyCustomAdapter extends ArrayAdapter<String> { 

     public MyCustomAdapter(Context context, int textViewResourceId, 
           String[] objects) { 
      super(context, textViewResourceId, objects); 
      // TODO Auto-generated constructor stub 
     } 
     @Override 
     public View getDropDownView(int position, View convertView, 
            ViewGroup parent) { 
      // TODO Auto-generated method stub 
      return getCustomView(position, convertView, parent); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      return getCustomView(position, convertView, parent); 
     } 

     public View getCustomView(int position, View convertView, 
            ViewGroup parent) { 
      // TODO Auto-generated method stub 
      // return super.getView(position, convertView, parent); 

      LayoutInflater inflater = getLayoutInflater(); 
      View row = inflater.inflate(R.layout.spinner_row, parent, false); 
      TextView label = (TextView) row.findViewById(R.id.menu_items); 
      label.setText(Menu_List[position]); 
      return row; 
     } 
    } 
     public class MyOnItemSelectedListener implements AdapterView.OnItemSelectedListener { 

      public void onItemSelected(AdapterView<?> parent, View view, int pos, 
             long id) { 
       Toast.makeText(
         parent.getContext(), 
         "The country is " 
           + parent.getItemAtPosition(pos).toString(), 
         Toast.LENGTH_LONG).show(); 
      } 

      public void onNothingSelected(AdapterView parent) { 
       // Do nothing. 
      } 
     } 

} 

und dies ist meine xML-Datei

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    tools:context="abtech.waiteriano.com.waitrer.MenuActivity"> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" /> 
    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:drawSelectorOnTop="true" 
     android:prompt="@string/ru_prompt" /> 

    <!-- <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="matc 
     h_parent" 
     android:layout_height="wrap_content"></FrameLayout>--> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="bottom" 
     android:id="@+id/rl1" 
     android:orientation="horizontal" 
     android:weightSum="2"> 
     <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_above="@+id/bottom_panel"> 
     </FrameLayout> 

     <LinearLayout 
      android:id="@+id/bottom_panel" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:weightSum="2" 
      android:layout_alignParentBottom="true"> 
      <RelativeLayout 
       android:id="@+id/fireID" 
       android:layout_width="fill_parent" 
       android:layout_height="50dp" 
       android:layout_weight="1" 
       android:background="#ff6b6b" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentStart="true"> 
       <ImageView 
        android:id="@+id/imageView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerHorizontal="true" 
        android:layout_centerVertical="true" 
        android:layout_gravity="center" 
        android:src="@drawable/fire" /> 
      </RelativeLayout> 
      <RelativeLayout 
       android:id="@+id/cartID" 
       android:layout_width="fill_parent" 
       android:layout_height="50dp" 
       android:layout_weight="1" 
       android:background="#6bfff3" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentStart="true"> 
       <ImageView 
        android:id="@+id/imageCart" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerHorizontal="true" 
        android:layout_centerVertical="true" 
        android:layout_gravity="center" 
        android:src="@drawable/shoppingcart" /> 
      </RelativeLayout> 
     </LinearLayout> 
    </RelativeLayout> 
</LinearLayout> 

dieses ist Spinner Reihe .XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/menu_items" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dip" 
     android:layout_marginBottom="10dip" 
     android:layout_marginTop="10dip" 
     android:textColor="#000000" /> 

</LinearLayout> 
+0

Mögliches Duplikat von [java.lang.IllegalStateException: Das angegebene Kind hat bereits ein Elternteil] (http://stackoverflow.com/questions/10007094/java-lang-illegalstateexception-the-specified-child-ready-has- A-Eltern) –

Antwort

1
if (toolbar.getParent() != null) 
          ((ViewGroup) toolbar.getParent()).removeView(menu_spinner); 

Bevor toolbar.addView();

+0

Danke, es funktioniert jetzt :) –

1

Ihre menu_spinner bereits eine übergeordnete Ansicht (die LinearLayout), wie in der XML-Datei deklariert hat. Wenn die App die XML-Datei lädt, wird der Drehfeld erstellt und dem linearen Layout hinzugefügt. Wenn Sie also versuchen, denselben Spinner der Symbolleiste toolbar.addView(menu_spinner, 0); hinzuzufügen, wird der Fehler angezeigt, der bei Ihnen aufgetreten ist.

+0

Vielen Dank für Ihre Antwort ..... Aber wie kann ich diesen Fehler lösen –

+0

Verschieben Sie einfach die Deklaration des Spinner in Ihrer XML-Datei innerhalb der Symbolleisten-Deklaration in Ihrer XML-Datei. Dann brauchst du keinen Code, um die Ansicht "Spinner" in deiner App hinzuzufügen (oder zu entfernen) – drew

Verwandte Themen