listview的片段不会被带有textview的片段替换

时间:2017-10-15 15:00:16

标签: java android android-fragments

我希望有一个带有图像的活动,然后是两个片段,一个带有列表视图的片段和带有textview的其他片段。

因此,当单击图像时,我想用列表视图显示片段,当单击片段上的项目时,我想用listview替换片段,片段带有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>

1 个答案:

答案 0 :(得分:0)

试试这个,可以帮到你

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();


        }