[英]Android - ListFragment and Custom Adapter
我是Android開發中的新手。 我在使用ListFragment和自定義適配器時遇到問題。 我的列表未填充任何對象。 你能檢查我的密碼嗎? 如果滾動到底部,您將看到一個對象,但隨后崩潰。
ListFragmen.java
public class Fragment_List extends ListFragment {
View item_view ;
private List<News> arNews = new ArrayList<News>();
Activity activity = getActivity();
private ArrayAdapter<News> arrayAdapter;
private ListView mListView;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
arrayAdapter = new MyListAdapter();
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
item_view= inflater.inflate(R.layout.item_view,null);
View v1=inflater.inflate(R.layout.fragment_list, container, false);
mListView= (ListView) v1.findViewById(android.R.id.list);
populateNewsList();
return v1;
}
public Fragment_List() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mListView.setAdapter(arrayAdapter);
}
private void populateNewsList() {
arNews.add(new News("Ciao",R.drawable.figura_0icona,"uno"));
arNews.add(new News("pippo",R.drawable.figura_1icona,"due"));
arNews.add(new News("pluto",R.drawable.figura_2icona,"tre"));
arNews.add(new News("Ciao",R.drawable.figura_3icona,"quattro"));
arNews.add(new News("pippo",R.drawable.figura_4icona,"cinque"));
arNews.add(new News("pluto",R.drawable.figura_5icona,"sei"));
arNews.add(new News("Ciao",R.drawable.figura_6icona,"sette"));
arNews.add(new News("pippo",R.drawable.figura_7icona,"otto"));
arNews.add(new News("pluto",R.drawable.figura_8icona,"nove"));
// TODO Auto-generated method stub
}
private class MyListAdapter extends ArrayAdapter<News>
{
public MyListAdapter(){
super(getActivity(),R.layout.item_view,arNews);
Toast.makeText(getContext(), "ciao"+arNews.size(), Toast.LENGTH_SHORT).show();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//make sure have a view to work with (may have given null)
View itemView = convertView;
if(itemView==null)
{
itemView=item_view;
if(itemView==null)
Toast.makeText(getContext(), "null", Toast.LENGTH_SHORT).show();
}
//find news to work with
News currentNews = arNews.get(position);
// fill the view
ImageView imageView = (ImageView) itemView.findViewById(R.id.news_icon);
imageView.setImageResource(currentNews.getFotoId());
//make
TextView makeText = (TextView) itemView.findViewById(R.id.news_anteprima);
makeText.setText(currentNews.getAntemprima());
Toast.makeText(getContext(), "testo"+currentNews.getAntemprima(), Toast.LENGTH_SHORT).show();
return itemView;
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
News clickedNews = arNews.get(position);
String message = "You clicked position" + position + " anteprima :" + clickedNews.getAntemprima();
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
super.onListItemClick(l, v, position, id);
}
}
fragment_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<ListView
android:id="@android:id/list"
android:layout_width="600dp"
android:layout_height="426dp" >
</ListView>
</LinearLayout>
非常感謝你!
首先,當您使用ListFragment時,需要在布局(fragment_list.xml)上聲明兩個元素:
此ID位於android核心中,然后android在其中隱式工作,添加,刷新和刪除元素。
查看您的代碼,您正在為ListView聲明一個對象。 錯了
刪除此對象的聲明。
其次 ,您的適配器。 您是從ArrayList擴展而來的,在構造函數上,需要給定Context , 資源 , List來調用超級構造函數。 Android開發人員參考:ArrayAdapter 。 ArrayAdapter(Context context,int resource,T [] objects)默認情況下, int資源為0(零)。
總結
將兩個ID為ID的內容添加到您的layout.xml中。
在Fragment_List類上,刪除ListView的所有實例。
在您的Adapter調用超級構造函數上,給定Context,資源,元素List。
從Fragment_List類調用新的構造函數。 Android開發人員參考:ListFragment 。 假設你需要調用ListFragment.setListAdapter()反對ListFragment.setAdapter()。
試用! 我認為那是工作!
希望對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.