encrypt_x 2019-03-16 06:07 采纳率: 100%
浏览 1037
已采纳

Android Fragment切换导致listview有数据也不显示

网上的方法基本上都试过了,没效果。

适配器能进getView(),返回的count也正常、


```public class Index extends AppCompatActivity {
    boolean flag = true;//判断数据是否第一加载
    private List<listView> listView = new ArrayList<listView>();
    private ListFragment listFragment = new ListFragment();
    private MineFragment mineFragment = new MineFragment();
    private OrderFragment orderFragment = new OrderFragment();
    Fragment currentFragment = listFragment;
    FragmentManager fm = getSupportFragmentManager();
    Fragment f = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_index);
        //解析菜单文件
        initData();
        final ListViewAdapter listViewAdapter = new ListViewAdapter(Index.this,R.layout.listlayout,listView);
        final ListView dataList = findViewById(R.id.Data_list);
        dataList.setAdapter(listViewAdapter);
        //导航图片设置初始化
        ImageView imageView1 = findViewById(R.id.nav_index);
        ImageView imageView2 = findViewById(R.id.nav_order);
        ImageView imageView3 = findViewById(R.id.nav_mine);
        View.OnClickListener listener= new OnClickListener(){

            @Override
            public void onClick(View v) {
                switch (v.getId()){
                    case R.id.nav_index:
                        listViewAdapter.notifyDataSetChanged();
                        dataList.setAdapter(listViewAdapter);
                        showFragment(listFragment);
                        break;
                    case R.id.nav_mine:
                        showFragment(mineFragment);
                        break;
                    default:
                        showFragment(orderFragment);
                        break;
                }
            }
        };
        imageView1.setOnClickListener(listener);
        imageView2.setOnClickListener(listener);
        imageView3.setOnClickListener(listener);

    }
    private void showFragment(Fragment fragment){
        FragmentTransaction ft = fm.beginTransaction();
        if (currentFragment != fragment){//  判断传入的fragment是不是当前的currentFragmentgit
            ft.hide(currentFragment);//  不是则隐藏
            currentFragment = fragment;  //  然后将传入的fragment赋值给currentFragment
            if (!fragment.isAdded()){ //  判断传入的fragment是否已经被add()过
                ft.add(R.id.fragment,fragment).show(fragment).commit();
            }else{
                ft.show(fragment).commit();
            }
        }
    }

    private void initData() {
        listView list = new listView("系统提示","测试内容信息","2019-3-14",R.drawable.shop1);
        listView.add(list);
        listView list1 = new listView("二号餐厅","测试内容信息","2019-3-14",R.drawable.shop2);
        listView.add(list1);
    }
}
适配器代码
public class ListViewAdapter extends ArrayAdapter {
    private final int resourceId;
    public ListViewAdapter(Context context, int resource, List<listView> objects ) {
        super(context, resource, objects);
        this.resourceId = resource;
    }

    @Override
    public View getView(int position,View convertView, ViewGroup parent) {
        listView listView = (listView) getItem(position);// 获取当前项的Fruit实例
        View view = LayoutInflater.from(getContext()).inflate(resourceId,null);//实例化一个对象
        ImageView listImage = (ImageView) view.findViewById(R.id.shop_img);//获取该布局内的图片视图
        TextView listText = (TextView) view.findViewById(R.id.shop_name);//获取该布局内的文字视图
        listImage.setImageResource(listView.getImageId());//设置资源
        listText.setText(listView.getTitle());
        System.out.println("被调用");
        return view;
    }
}
listview的Xml
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/index_gray">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <ListView
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:background="@color/index_white"
        android:id="@+id/Data_list">

    </ListView>
    </LinearLayout>
</FrameLayout>
Activity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/con_index"
    android:layout_width="match_parent"
    android:background="@color/index_gray"
    android:layout_height="match_parent">
    <fragment
        android:layout_width="match_parent"
        android:layout_height="600dp"
        android:name="com.example.administrator.app.ListFragment"
        android:id="@+id/fragment"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:padding="5dp"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        android:background="@color/index_white">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            >
        <ImageView
            android:id="@+id/nav_index"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/shouye"
            android:layout_alignParentLeft="true"/>
        <ImageView
            android:id="@+id/nav_order"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/dingdan"
            android:layout_centerHorizontal="true"/>
        <ImageView
            android:id="@+id/nav_mine"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/wode"
            android:layout_alignParentRight="true"/>
        </RelativeLayout>
    </LinearLayout>
</RelativeLayout>

展开全部

  • 写回答

3条回答 默认 最新

  • qq_21235081 2019-03-18 03:02
    关注

    你的listView是fragment里面的,你得把
    //解析菜单文件
    initData();
    final ListViewAdapter listViewAdapter = new ListViewAdapter(Index.this,R.layout.listlayout,listView);
    final ListView dataList = findViewById(R.id.Data_list);
    dataList.setAdapter(listViewAdapter);
    这些代码放到fragment里面去,不然 findViewById(R.id.Data_list) ;是找不到对应的listview的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 lvm2被mask了,怎么unmask都没用(标签-ubuntu|关键词-apt)
  • ¥15 交叉注意力机制的残差问题
  • ¥15 微信小程序:渲染收货地址时页面不显示
  • ¥20 win7 64位DirectShow提示初始化失败如何解决?
  • ¥20 小规模孤立词识别系统设计
  • ¥15 关于Java对接海康威视车牌识别一体机SDK是否需要固定外网的IP?
  • ¥15 Linux扩容时,格式化卡住了:vgdispaly查看卷组信息,没有输出
  • ¥18 关于#ubuntu#的问题:使用背景-工作职责内有七八台ubuntu系统的电脑,平时需要互相调取资料,想实现把这几台电脑用交换机组成一个局域网,来实现指定文件夹的互相调取和写入
  • ¥20 求一个简易射频信号综测仪
  • ¥15 esp8266 tally灯 接收端改为发射端
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部