当前位置: 首页 > 知识库问答 >
问题:

在Android中如何在碎片中填充自定义列表?

夏季萌
2023-03-14

我有一个片段,我想创建一个自定义列表视图,但当我发送参数到适配器,它给我的错误。

这是我的代码片段..

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

    TextView tv = (TextView) v.findViewById(R.id.textView1);

    CustomAdapter arrayAdapter = new CustomAdapter(getActivity(), R.layout.search_catagory_list, prgmImages, prgmNameList);
    lv = (ListView) v.findViewById(R.id.listView);

    lv.setAdapter(arrayAdapter);
    return v;
}

这是我的Mainhome.java

package com.example.yasee.bitescene.Fragments;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

import com.example.yasee.bitescene.R;
import com.example.yasee.bitescene.adapter.CustomAdapter;

import java.util.ArrayList;

public class MainHome extends Fragment {
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    private String mParam1;
    private String mParam2;

ListView lv;
public static int [] prgmImages={R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four,R.drawable.five};
public static String [] prgmNameList={"TRULY RANDOM","TEX MEX","BBQ","BRUNCH","SUSHI"};

private OnFragmentInteractionListener mListener;

public MainHome() {

}

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

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

    TextView tv = (TextView) v.findViewById(R.id.textView1);

    CustomAdapter arrayAdapter = new CustomAdapter(getActivity(), R.layout.search_catagory_list, prgmImages, prgmNameList);
    lv = (ListView) v.findViewById(R.id.listView);

    lv.setAdapter(arrayAdapter);
    return v;
}

public static MainHome newInstance(String param1, String param2) {
    MainHome fragment = new MainHome();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
}


public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

/**
 * This interface must be implemented by activities that contain this
 * fragment to allow an interaction in this fragment to be communicated
 * to the activity and potentially other fragments contained in that
 * activity.
 * <p>
 * See the Android Training lesson <a href=
 * "http://developer.android.com/training/basics/fragments/communicating.html"
 * >Communicating with Other Fragments</a> for more information.
 */
public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);
}
}

package com.example.yasee.bitescene.adapter;



import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.yasee.bitescene.Fragments.MainHome;
import com.example.yasee.bitescene.R;
import com.example.yasee.bitescene.Search;

import java.util.ArrayList;

public class CustomAdapter extends BaseAdapter {
    String [] result;
    Context context;
    int [] imageId;
    private static LayoutInflater inflater=null;

public CustomAdapter(Activity activity, int search_catagory_list, int[] prgmImages, String[] prgmNameList) {
    // TODO Auto-generated constructor stub
    result=prgmNameList;
    context=activity;
    imageId=prgmImages;
    inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return result.length;
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public class Holder
{
    TextView tv;
    ImageView img;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    Holder holder=new Holder();
    View rowView;
    rowView = inflater.inflate(R.layout.search_catagory_list, null);
    holder.tv= (TextView) rowView.findViewById(R.id.textView1);
    holder.img=(ImageView) rowView.findViewById(R.id.imageView1);
    holder.tv.setText(result[position]);
    holder.img.setImageResource(imageId[position]);
    rowView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show();
        }
    });
    return rowView;
}

}

我的错误是...

共有1个答案

华善
2023-03-14

LV似乎为空,导致NullPointerException

确保ListViewID实际设置为ListView,正如下面一行所期望的那样。还要确保它在布局fragment_list

lv = (ListView) v.findViewById(R.id.listView);
 类似资料:
  • 我正在做一个项目,在这个项目中,一个旧的库被原生地用在Android中。正因为如此,我被迫在Kotlin中工作,为了查看屏幕上的一些元素而使用一个xml文件。然而,我在问自己,是否有一种方法可以在Android中创建一个自定义的activity/片段,并调用一个flutter屏幕文件,在这个文件中我可以使用应用程序中的所有flutter小部件。我目前正在使用方法通道,以便在Kotlin和Dart之

  • 问题内容: 我对Java,JavaFX和编程一般还是有点陌生​​,但是我遇到的问题困扰着我。 在大多数教程中,我查找了有关填充ListView(更具体地说,使用ObservableArrayList)的方法,最简单的方法是从String的ObservableList中创建它,如下所示: 但是我不想使用字符串。我想使用我制作的名为Words的自定义对象: 每个Word对象只有两个属性:wordStr

  • 我对Java、JavaFX和一般编程都有点陌生,我有一个问题让我大吃一惊。 在我查阅的大多数关于填充ListView(更具体地说,使用ObservableArrayList)的教程中,最简单的方法是从字符串的ObservableList创建它,如下所示: 但我不想用字符串。我想使用我制作的一个名为Words的自定义对象: 要明确的是,这不是android的,单词列表最终会被更改、保存和加载,所以我

  • 我用TabLayout设置了ViewPager2,以便通过滑动或单击选项卡来切换片段。我所知道的问题是,我的碎片并没有占据所有的空间,我在底部有一个无法滑动的空白空间。我怎样才能把我的碎片填满那个空间? 编辑:我认为我的问题与我试图在另一个片段中加载我的视图寻呼机这一事实有关。我将我的代码复制到一个新项目中,而不是将我的代码加载到一个片段中,而是将它加载到主活动中,并且它已经工作了。在片段中加载视

  • 并希望按列表中的值更改行C1-C3。预期产出:

  • 我正在研究laravel 5.2,也是laravel的初学者。我在数据库中有和表<客户表的code>user字段存储用户表的。i、 一个用户有多个客户端,一个客户端属于一个用户。现在来谈谈问题。当我要插入登录用户的新客户端时,我得到了一个错误。没有任何错误消息。我搜索并了解到,这可能是因为外键列名是,而不是。所以我从