带有列表视图的片段没有被带有textview的片段替换

问题描述:

我想要一个带有图像然后两个片段的活动,一个带有列表视图的片段和另一个带有textview的片段。带有列表视图的片段没有被带有textview的片段替换

所以,当图像被点击时,我想要显示带有列表视图的片段,并且当片段上的项目被点击时,我想用带有textview的片段替换带有列表视图的片段,点击列表项。

我用下面的代码做这件事,但它不工作,当一个列表项目的项目被点击时,带有listview的片段不会被带有textview的片段替换,所以列表项目文本不会出现。

主要业务类:

public class MainActivity extends AppCompatActivity { 

     private ImageView img; 


     FragmentManager fragmentManager; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 


      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      fragmentManager = getFragmentManager(); 

      img = (ImageView) findViewById(R.id.imageView); 
     } 

     private void addFragment() { 
      Fragment fragment = new Fragment(); 
      FragmentTransaction transaction = fragmentManager.beginTransaction(); 
      transaction.add(R.id.listviewInFragment, fragment, "frag"); 
      transaction.commit(); 
     } 


     public void AddFragmentList(View view) { 
      Fragment fragment = new Fragment(); 
      FragmentTransaction transaction = fragmentManager.beginTransaction(); 
      transaction.add(R.id.container, new FragmentA(), "frag"); 
      transaction.commit(); 
     } 
    } 

主要活动的xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:srcCompat="@drawable/image" 
     android:onClick="AddFragmentList" 
     tools:layout_editor_absoluteY="71dp" 
     tools:layout_editor_absoluteX="0dp" /> 



    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="0dp" 
     android:layout_height="200dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintHorizontal_bias="0.0" 
     tools:layout_editor_absoluteY="390dp"> 

    </FrameLayout> 


</android.support.constraint.ConstraintLayout> 

片段与列表视图:

public class FragmentA extends Fragment{ 


    private ListView listItems; 


    private String[] items = { 
      "item1", 
      "item2", 
      "item3", 
      "item4" 
    }; 

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

     return view; 

    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 


     super.onActivityCreated(savedInstanceState); 


     listItems = (ListView) getView().findViewById(R.id.listviewInFragment); 


     ArrayAdapter<String> adapter = 
       new ArrayAdapter<String>(getActivity().getApplicationContext(), 
         android.R.layout.simple_list_item_1, android.R.id.text1, items); 


     listItems.setAdapter(adapter); 


     listItems.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       int positionCode = i; 
       String clickedValue = (String) adapterView.getItemAtPosition(i); 


       Toast.makeText(getActivity().getApplicationContext(), clickedValue, Toast.LENGTH_SHORT).show(); 


       Bundle b = new Bundle(); 
       b.putString("clickedValue", clickedValue); 

       FragmentA fragA = new FragmentA(); 
       fragA.setArguments(b); 
       getFragmentManager().beginTransaction().replace(R.id.container, fragA); 


      } 

     }); 
    } 

} 

片段与列表视图的xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#0ff"> 

    <ListView 
     android:layout_width="368dp" 
     android:layout_height="495dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginStart="16dp" 
     android:id="@+id/listviewInFragment"/> 

</android.support.constraint.ConstraintLayout> 

片段与文本视图:

public class fragmentb extends Fragment { 

    private TextView tv; 
    Intent intent; 


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

     return view; 

     } 

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

     tv = (TextView) getView().findViewById(R.id.textView); 

     Bundle b = this.getArguments(); 
     if(b != null){ 
      String clickedValue =b.getString("clickedValue"); 
      tv.setText(clickedValue); 
     } 

    } 
} 

片段与文本视图XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ff0"> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="17dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     /> 

</android.support.constraint.ConstraintLayout> 

试试这个,可以帮助你

listItems.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      int positionCode = i; 
      String clickedValue = (String) adapterView.getItemAtPosition(i); 


      Toast.makeText(getActivity().getApplicationContext(), clickedValue, Toast.LENGTH_SHORT).show(); 


      Bundle b = new Bundle(); 
      b.putString("clickedValue", clickedValue); 


      FragmentB fragb = new FragmentB(); 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = 
      fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.container, fragb); 
      fragmentTransaction.commit(); 


     } 
+0

谢谢,但它不工作时,在列表视图中的项目被点击与文本视图的fragmentb不会出现只有列表视图。 – JonD

+0

是否叫做fragmentb – UltimateDevil

+0

不,它不会出现。 – JonD