简体   繁体   中英

Add custom layout to listview row

I have tried for a while now but I still can't seem to get it right. I can add a custom header to a listview but I can't add a custom row layout to a list. I want each row in the list to have the layout of the file "listitemrow.xml" but I can't seem to quite understand how to do that despite reading multiple tutorials.

Here is my code

public class PortfolioFragMent extends android.app.ListFragment{
    private String[] ShareholdingNames;
    private ListView mainListView ;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

        ListView listView = new ListView(getActivity());
        super.onCreate(savedInstanceState);

        ViewGroup header = (ViewGroup)inflater.inflate(R.layout.listviewheader, listView, false);
        listView.addHeaderView(header, null, false);

        ViewGroup listrow = (ViewGroup)inflater.inflate(R.layout.listitemrow, listView, false);
//listView.add(listitemrow); I want to do something like this

        ArrayAdapter<String> array = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1);
        setListAdapter(array);
        ShareholdingNames= ShareholdingNames();

        for (String str : ShareholdingNames)
            array.add(str);
        listView.setAdapter(array);
        return listView;
    }

    private String[] ShareholdingNames(){
        ShareholdingNames = new String[Portfolio.getPortfolio().count()];
        for(int i=0; i < Portfolio.getPortfolio().count(); i++){
            ShareholdingNames[i]= Portfolio.getPortfolio().getShareHolding(i).getName();
        }
        return ShareholdingNames;
    }

    public void onListItemClick(ListView l, View v, int position, long id) {
        Intent intent = new Intent(getActivity().getApplicationContext(),
        DetailShareHoldingActivity.class);
        intent.putExtra("new_variable_name","value");
        intent.putExtra("bookPositionInList",position);
        startActivity(intent);  
    }
}

To do so you need to add your own custom adapter and add the line

ViewGroup listrow = (ViewGroup)inflater.inflate(R.layout.listitemrow, listView, false);

into the adapter's getView method..

public class ListAdapter extends ArrayAdapter<Item> {

 public ListAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
// TODO Auto-generated constructor stub
}

private List<Item> items;

public ListAdapter(Context context, int resource, List<Item> items) {

super(context, resource, items);

this.items = items;

}

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

View v = convertView;

if (v == null) {

    LayoutInflater vi;
    vi = LayoutInflater.from(getContext());
    v = vi.inflate(R.layout.listitemrow, listView, false);

}

 ...
return v;

}
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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