2017-07-01 111 views
1

我有一个ListView在ListView.class,当用户点击一个项目(假设位置= 0的项目)Fragment6应该打开。使用片段破坏的活动

此外,我有一个HandleListClick.class获取位置(例如位置= 0),然后使用switch来打开一个片段,但我得到一个错误。

java.lang.IllegalStateException:活动遭到破坏

我该如何处理这个恼人的问题?我的活动在Manifest中声明。

这是我ListView.class

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      // ListView Clicked item index 
      int itemPosition  = position; 

      // ListView Clicked item value 
      String itemValue = (String) listView.getItemAtPosition(position); 


       if (position==0){ 
        HandleListClick handleListClick = new HandleListClick(); 
        handleListClick.getItemPosition(0); 
       } 
} 

这里是我的handleListClick.class

public class HandleListClick extends AppCompatActivity { 

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


public void getItemPosition(int position) { 
    switch (position) { 
     case 0: 
      Fragment6 frag6 = null; 
      frag6 = new Fragment6(); 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      fragmentManager.beginTransaction() 
        .replace(R.id.framelayout, frag6) 
        .commit(); 


    } 
} 

}

这里是我的Fragment6.java

public class Fragment6 extends Fragment { 

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

    View v = inflater.inflate(R.layout.fragmentdescrip6, container,false); 
    return v; 



// ViewGroup rootView = (ViewGroup) inflater.inflate(
    //   R.layout.fragmentdescrip6, container, false); 

// return rootView; 
} 

}

这里是activity_handle_list_click.xml

 <?xml version="1.0" encoding="utf-8"?> 
     <android.support.constraint.ConstraintLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.user.app.HandleListClick"> 


    <FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id= "@+id/framelayout" 
     > 


    </FrameLayout> 

</android.support.constraint.ConstraintLayout> 

这里是fragmentdescrip6.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/frag6" 

    > 

    <TextView 
     android:id="@+id/textfrag6label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="foo" 
     android:textStyle="bold" 
     android:textColor="#FFFF4444" 
     android:textSize="20dp" 
     android:layout_marginTop="17dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

    <TextView 
     android:id="@+id/textfrag6" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_below="@+id/textfrag6label" 
     android:layout_marginLeft="16dp" 
     android:layout_marginStart="16dp" 
     android:layout_marginTop="33dp" 
     android:textStyle="bold" 
     android:text="some Text" /> 


</RelativeLayout> 

回答

2

尝试这种方式

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

       // ListView Clicked item index 
       int itemPosition  = position; 

       // ListView Clicked item value 
       String itemValue = (String) listView.getItemAtPosition(position); 


       if (position==0){ 
        Intent intent = new Intent(CurrentActivity.this, HandleListClick.class); 
        intent.putExtra("POSITION", position); 
        startActivity(intent); 
       } 
        /* HandleListClick handleListClick = new HandleListClick(); 
        handleListClick.getItemPosition(0);*/ 
       } 
      } 

更改活动代码

public class HandleListClick extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_handle_list_click); 
      Intent intent = getIntent(); 
      int pos = intent.getIntExtra("POSITION",0); 
      getItemPosition(pos); 
     } 


     public void getItemPosition(int position) { 
      switch (position) { 
       case 0: 
        Fragment6 frag6 = null; 
        frag6 = new Fragment6(); 
        FragmentManager fragmentManager = getSupportFragmentManager(); 
        fragmentManager.beginTransaction() 
          .replace(R.id.framelayout, frag6) 
          .commit(); 


      } 
     } 
    } 
+0

谢谢!它终于奏效了。我非常感谢 – Blnpwr

+0

但是如果我的位置= 1,会发生什么?然后'int pos = intent.getIntExtra(“POSITION”,0);'不起作用,对吧? – Blnpwr

+1

如果position == 1,那么HandleListClick类的onCreate将不会被调用,因为我们只在onItemClick()中放置了位置== 0的条件。 –