【发布时间】:2015-03-10 20:33:45
【问题描述】:
我想使用来自 TED API 的 Ted Talks 填充自定义列表视图,但没有显示任何内容。我已经做了所有的努力,但什么也没做。 这是我的代码 片段类
public class TalksFragment extends ListFragment {
private ListView talkList;
private String TalkUrl = "https://api.ted.com/v1/talks.json?api-key=nm4nq9uyqg558m7z8axbu3be&order=created_at:desc&fields=media_profile_uris,photo_urls,speakers&offset=";
private HandleJSON obj;
private ProgressDialog m_ProgressDialog = null;
private ArrayList<TalksItems> TalkItemsArray = null;
private TalkListAdapter talkListAdapter;
private Runnable viewOrders;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View talks = inflater.inflate(R.layout.talk_list_frag, container, false);
talkList = (ListView) talks.findViewById(android.R.id.list);
return talks;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TalkItemsArray = new ArrayList<>();
this.talkListAdapter = new TalkListAdapter(getActivity(), android.R.layout.simple_list_item_1, TalkItemsArray);
talkList.setAdapter(this.talkListAdapter);
viewOrders = new Runnable(){
@Override
public void run() {
int Offset=0;
obj = new HandleJSON(TalkUrl + Offset);
obj.fetchJSON("Talks");
while (obj.parsingComplete);
TalkItemsArray = obj.getTalkItems();
getActivity().runOnUiThread(returnRes);
}
};
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
m_ProgressDialog = ProgressDialog.show(getActivity(),
"Please wait...", "Retrieving data ...", true);
}
private Runnable returnRes = new Runnable() {
@Override
public void run() {
int size = TalkItemsArray.size();
if(TalkItemsArray != null && TalkItemsArray.size() > 0){
talkListAdapter.notifyDataSetChanged();
for(int i=0; i<size; i++)
talkListAdapter.add(TalkItemsArray.get(i));
}
m_ProgressDialog.dismiss();
talkListAdapter.notifyDataSetChanged();
}
};
private class TalkListAdapter extends ArrayAdapter<TalksItems>{
LayoutInflater inflater;
private ArrayList<TalksItems> items;
public TalkListAdapter(Context context, int textViewResourceId, ArrayList<TalksItems> items) {
super(context, textViewResourceId, items);
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null)
view = inflater.inflate(R.layout.custom_list_talk, null);
else
view = convertView;
TalksItems TI = items.get(position);
if(TI != null){
TextView talkName = (TextView)view.findViewById(R.id.txtTalkName);
TextView speakerName = (TextView)view.findViewById(R.id.txtSpeakerName);
TextView talkDescription = (TextView)view.findViewById(R.id.txtTalkDescription);
ImageView talkImage = (ImageView)view.findViewById(R.id.talkImage);
talkName.setText(TI.getTalkName());
speakerName.setText(TI.getSpeakerName());
talkDescription.setText(TI.getTalkDescription());
talkImage.setImageURI(TI.getImageURL());
}
return view;
}
}
} 其中 custom_list_talk 是自定义列表的布局,talk_list_frag 是具有 ID 为“@android:id/list”的列表视图的片段的布局 API 工作正常,数据来自 API 正确。 问题是它在自定义列表视图中什么都不显示(或者它可能没有膨胀等)
编辑 愚蠢的错误。我没有调用 getMethod。
【问题讨论】:
-
1.是 TI != null 吗? 2、你的适配器的getCount方法在哪里?您是否确认它返回 > 0?
-
1.是 2. 我没有检查适配器,但只检查了 API 中的数据。如何检查适配器是否返回?
-
这个问题代表我错了一半,你不需要自己实现getCount,但你可以做adapter.getCount来检查它是否真的有项目。另外,发布您的 xml 文件。
-
哦,是的。太感谢了。我提出的非常愚蠢的问题。在您的指导下,我能够解决它,谢谢您
-
很高兴听到。您可能希望使用您找到的解决方案来编辑您的问题,这可能对其他人有帮助。
标签: android listview android-fragments android-custom-view