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

时间:2014-08-19 06:24:57

标签: java android xml android-fragments

所以我一直在乱用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;
 }
}

我的JokeListClass

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;
 }
}

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

import android.app.Activity; import 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>

3 个答案:

答案 0 :(得分:0)

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

删除此行

答案 1 :(得分:0)

最好放这些线     JokeListData jokeListData = mList.get(position);

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

if if(convertView == null)condition

答案 2 :(得分:0)

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

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

类似

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