同样的代码,listview出现在activity中,但是listview没有出现在fragment中

Posted

技术标签:

【中文标题】同样的代码,listview出现在activity中,但是listview没有出现在fragment中【英文标题】:In the same code, listview appears in activity, but listview does not appear in fragment 【发布时间】:2021-06-15 15:25:55 【问题描述】:

tried to solve a similar question to mine, but I failed.

    ListView can appear in Activity but can't appear in Fragment

    ListView on Fragment does not appear

在activity中运行的代码不在fragment中运行。我试图通过参考***中的文章来解决它,但是失败了请教我方法。到底是什么问题?

片段

public class Fragment_Result extends Fragment 

    EditText et_search;
    ListView lv_search;

    public Fragment_Result() 

    

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
        return inflater.inflate(R.layout.result_fragment, container, false);
    

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) 
        super.onViewCreated(view, savedInstanceState);

        final ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1);

        lv_search = (ListView) view.findViewById(R.id.lv_search);
        lv_search.setAdapter(adapter);

        adapter.add("Adam Smith");
        adapter.add("Bryan Adams");
        adapter.add("Chris Martin");
        adapter.add("Daniel Craig");
        adapter.add("Eric Clapton");
        adapter.add("Frank Sinatra");

        et_search = (EditText) view.findViewById(R.id.et_search);
        et_search.addTextChangedListener(new TextWatcher() 

            @Override
            public void afterTextChanged(Editable edit) 
                String filterText = edit.toString();
                if (filterText.length() > 0) 
                    lv_search.setFilterText(filterText);
                 else 
                    lv_search.clearTextFilter();
                
                ((ArrayAdapter) lv_search.getAdapter()).getFilter().filter(filterText);
            

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) 
            

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) 
            

        );
    

fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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_
    android:layout_>

    <TextView
        android:layout_marginTop="60dp"
        android:layout_
        android:layout_
        android:textSize="23sp"
        android:layout_marginLeft="25dp"
        android:layout_marginRight="8dp"
        android:id="@+id/tv_search"
        android:text="search : " />

    <EditText
        android:layout_marginTop="60dp"
        android:layout_marginRight="25dp"
        android:layout_
        android:layout_
        android:layout_toRightOf="@id/tv_search"
        android:id="@+id/et_search"/>

    <ListView
        android:layout_marginTop="60dp"
        android:layout_
        android:layout_
        android:layout_below="@id/et_search"
        android:textFilterEnabled="true"
        android:id="@+id/lv_search"/>

</RelativeLayout>

在活动和分片中使用的代码只有一部分不同。

活动列表视图:ArrayAdapter 适配器 = new ArrayAdapter(this, android.R.layout.simple_list_item_1);

片段列表视图:最终的 ArrayAdapter 适配器 = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1);

【问题讨论】:

【参考方案1】:

在设置适配器之前添加项目。你可以试试这个吗?

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

    adapter.add("Adam Smith");
    adapter.add("Bryan Adams");
    adapter.add("Chris Martin");
    adapter.add("Daniel Craig");
    adapter.add("Eric Clapton");
    adapter.add("Frank Sinatra");

    lv_search = (ListView) view.findViewById(R.id.lv_search);
    lv_search.setAdapter(adapter);

    

【讨论】:

即使我用你给我的代码更改了适配器的位置而不使用final,也会出现白屏。

以上是关于同样的代码,listview出现在activity中,但是listview没有出现在fragment中的主要内容,如果未能解决你的问题,请参考以下文章

使用 asynctask 在所有 Fragment 中的 Activity 中显示 ListView

为什么Intent在调用Activity时没有重定向?

ListView的item监听事件,并且把值传递给另一个activity

在Activity右侧创建ListView

ListView和Adapter

我想使用 json 将 Listview 数据发送到 Android 中的另一个 Activity