繁体   English   中英

自定义ArrayAdapter在我的片段中显示一个空白屏幕

[英]Custom ArrayAdapter showing a blank screen in my Fragment

所以我只是在和android玩了一会儿,我遇到了一些麻烦。 我出于某种原因实例化ListOfJokesTypesAdapter的片段未显示由JokeData类中的数据填充的列表视图。

我得到的只是一个空白屏幕(没有错误或类似性质的东西)。

这只是我一直在进行的概念验证,因此,我们将不胜感激。 为什么当我的MainClassAdapter工作正常时,这个特定的自定义适配器无法工作。

编码

我的笑话课:

public class Joke {

private String jokeSetup;
private String jokePunchline;

public Joke(String jokeSetup, String jokePunchline) {
    this.jokeSetup = jokeSetup;
    this.jokePunchline = jokePunchline;
}

public String getJokeSetup() {
    return jokeSetup;
}

public void setJokeSetup(String jokeSetup) {
    this.jokeSetup = jokeSetup;
}

public String getJokePunchline() {
    return jokePunchline;
}

public void setJokePunchline(String jokePunchline) {
    this.jokePunchline = jokePunchline;
 }
}

我的笑话清单类

public class JokeListData {

private String listName;
private List<Joke> arrayListOfJokes;

public JokeListData(String listName, List<Joke> arrayListOfJokes) {
    this.listName = listName;
    this.arrayListOfJokes = arrayListOfJokes;
}

public String getListName() {
    return listName;
}

public void setListName(String listName) {
    this.listName = listName;
}

public List<Joke> getArrayListOfJokes() {
    return arrayListOfJokes;
}

public void setArrayListOfJokes(ArrayList<Joke> arrayListOfJokes) {
    this.arrayListOfJokes = arrayListOfJokes;
}
}

我的实际笑话数据

public class JokeData {



private static List<Joke> dogJokes = new ArrayList<Joke>(){

    {
        add(new Joke("Dogs", "Bark"));
        add(new Joke("Dogs", "Woof"));
        add(new Joke("Dogs", "Howl"));
        add(new Joke("Dogs", "Sniff"));
    }
};


private static List<Joke> catJokes = new ArrayList<Joke> (){
    {
        add(new Joke("Cats", "woof"));
        add(new Joke("Dogs", "Meow"));
    }
};

static List<JokeListData> dataOfJokeList = new ArrayList<JokeListData>();

public static void addEntries(){
    dataOfJokeList.add(new JokeListData("Cat Jokes", catJokes));
    dataOfJokeList.add(new JokeListData("Dog Jokes", dogJokes));
 }

}

适配器

public class ListOfJokeTypesAdapter extends ArrayAdapter<JokeListData> {

Context mContext;
int mLayoutId;
List<JokeListData> mList;

public ListOfJokeTypesAdapter(Context context, int resource, List<JokeListData> objects) {
    super(context, resource, objects);
    this.mContext = context;
    this.mLayoutId = resource;
    this.mList = objects;
}


@Override
public int getCount() {
    return super.getCount();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder = null;

    if(convertView == null){
        LayoutInflater inflater = LayoutInflater.from(mContext);
        convertView = inflater.inflate(mLayoutId,parent,false);

        holder = new ViewHolder();

        holder.mTextView = (TextView) convertView.findViewById(R.id.rowForMainList);

        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
    }

    JokeListData jokeListData = mList.get(position);

    holder.mTextView.setText(jokeListData.getListName());

    return convertView;
}

private static class ViewHolder{
    TextView mTextView;
 }
}

利用适配器的片段

public class ListOfJokeTypesFragment extends Fragment {

ListView mListView;
ListOfJokeTypesAdapter listOfJokeTypesAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.joke_type_fragment,container,false);
    JokeData.addEntries();
    mListView = (ListView)view.findViewById(R.id.jokeTypeListView);
    listOfJokeTypesAdapter = new ListOfJokeTypesAdapter(getActivity().getApplicationContext(),R.layout.row,JokeData.dataOfJokeList);
    mListView.setAdapter(listOfJokeTypesAdapter);

    return view;
 }
}

片段管理器包com.example.taranveer.jokeapplicationactual;

导入android.app.Activity; 导入android.os.Bundle;

/ ** *由Taranveer在2014-07-22创建。 * /公共类TheFragmentActivityManager扩展Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_container);

    Bundle args = getIntent().getExtras();

    if(findViewById(R.id.container) != null){

           if(args != null){
               if(args.getInt("randomjoke") == 1){
                  RandomJokeFragment randomJokeFragment = new RandomJokeFragment();
                  getFragmentManager().beginTransaction()
                                      .replace(R.id.container, randomJokeFragment)
                                       .commit();
               }
           }
    }
    if(findViewById(R.id.container) != null){

        if(args!=null){
            if(args.getInt("listofjoketypes") == 2){
                ListOfJokeTypesFragment listOfJokeTypesFragment = new ListOfJokeTypesFragment();
                getFragmentManager().beginTransaction()
                                    .replace(R.id.container,listOfJokeTypesFragment)
                                    .commit();
            }
        }
    }

}
}

相关的XML:

joke_type_fragment.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

<ListView
    android:id="@+id/jokeTypeListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</ListView>

</LinearLayout>

row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
android:layout_margin="5dp"
android:gravity="center_vertical"
android:background="#000000"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
    android:textColor="#eeeeee"
    android:textStyle="bold"
    android:layout_margin="5dp"
    android:padding="5dp"
    android:background="#2299dd"
    android:textSize="20sp"
    android:text="Main Activity Items"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/rowForMainList"/>
</LinearLayout>

</LinearLayout>
beforr@Override
public int getCount() {
    return super.getCount();
}

删除此行

最好将这些行放在JokeListData jokeListData = mList.get(position);中。

holder.mTextView.setText(jokeListData.getListName()); 

内部if(convertView == null)条件

您需要在自定义适配器中覆盖getCount() 它将返回ListView中的条目数。 更换

@Override
public int getCount() {
    return super.getCount();
}

用类似的东西

@Override
public int getCount() {
    return mySourceArrayList.getCount();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM