Tab片段中的ListView

时间:2013-11-01 20:42:15

标签: android android-listview android-fragments

我正在尝试将自定义列表视图放在选项卡式片段中,我最接近的是将其放入双窗格活动的左侧“列表”窗格中。

这是问题所在。 我觉得我的自定义适配器出了问题,而且我没有正确引用上下文。对于tab1fragment,我很确定我正在错误地传递该视图。 作为一个注释,我没有在OnCreate上填充mylistview,而是将我的listView放在onAttached中;我听说最好避免某些函数在创建过程中返回null。

此应用程序的设计是......

单活动单窗格 - >多窗格活动...

多窗格活动 - >左边是一个片段的小容器,它包含一个列表视图和一些文本框。 [我们现在叫这个列表查看A.]

多窗格活动 - >对,细节窗格: 在详细信息窗格中是一个托管选项卡的片段,每个选项卡都是一个片段。我想在每个选项卡中放置一个listView。 [现在列出视图B?]

当我尝试最接近的时候,我会把它贴在我的第一个“listview A”中。

为了简洁起见,如果您觉得自己需要更多,请不要犹豫,我会砍掉密码。 [另有约7-8页]我发表评论,指出我认为有问题的代码。我没有完全理解我的listAdapter中的getView,特别是if (convertView == null)代码块。

如果你看到任何其他奇怪的问题,并想提出建设性的批评,我完全渴望进行代码审查!

其他注意事项: 在我的所有代码上使用fragmentupport管理器。

Tab1DrinkFragment

    @Override
    public void onAttach(Activity activity){
        super.onAttach(activity);

        ArrayList<Item> menu = new ArrayList<Item>();

        Item item1 = new Item("Coke","Pure cane sugar!", 2.50);
        Item item2 = new Item("Dr Pepper","Pure cane sugar!", 3.00);
        Item item3 = new Item("Sprite","Pure cane sugar!", 2.50);

        menu.add(item1);
        menu.add(item2);
        menu.add(item3);

        View v = getView();
        CustomOrderListAdapter adapter = new CustomOrderListAdapter(getActivity(),menu);

        ListView listView = (ListView) v.findViewById(R.id.drinkList); //Problem code
        listView.setAdapter(adapter);
    }

Tab1Drink.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

 <!-- When I got this to work I was not using @id/drinkList but @+id/android:list -->
    <ListView
        android:id="@+id/drinkList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:dividerHeight="1dp"
        android:background="@color/dark_blue" />

</RelativeLayout>

CustomOrderListAdapter

import java.util.ArrayList;
import java.util.Arrays;

import com.landa.backend.*;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.landa.R;

public class CustomOrderListAdapter extends BaseAdapter {

        Context context;
        int layoutResourceId;
        private ArrayList<Item> listData; //Once we get json working be a REALLY good idea to actually use the generic features of this

        private LayoutInflater layoutInflater;

        public CustomOrderListAdapter(Context context, ArrayList<Item> listData) {
            this.context = context;
            this.listData = listData;
        }

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

        @Override
        public Object getItem(int position) {
            return listData.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            OrderHolder holder;
            if (convertView == null) {

                layoutInflater = LayoutInflater.from(context); //Problem code
                convertView = layoutInflater.inflate(R.layout.customer_order_list_row, null);
                holder = new OrderHolder();
                holder.nameView = (TextView) convertView.findViewById(R.id.itemName);
                holder.priceView = (TextView) convertView.findViewById(R.id.price);
                holder.removedItemsView = (TextView) convertView.findViewById(R.id.removedItems);
                convertView.setTag(holder);
            } else {
                holder = (OrderHolder) convertView.getTag();
            }
            Item item = (Item)listData.get(position);
            holder.nameView.setText(item.getName());
            holder.priceView.setText(String.valueOf(item.getPrice()));
            //holder.removedItemsView.setText(Arrays.toString(item.getRemoved()));

            return convertView;
        }

        static class OrderHolder {
            TextView nameView;
            TextView priceView;
            TextView removedItemsView;
        }

}

1 个答案:

答案 0 :(得分:0)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState) {

    ArrayList<Item> menu = new ArrayList<Item>();

    Item item1 = new Item("Coke","Pure cane sugar!", 2.50);
    Item item2 = new Item("Dr Pepper","Pure cane sugar!", 3.00);
    Item item3 = new Item("Sprite","Pure cane sugar!", 2.50);

    menu.add(item1);
    menu.add(item2);
    menu.add(item3);

    CustomOrderListAdapter adapter = new CustomOrderListAdapter(getActivity(),menu);

    View view = inflater.inflate(R.layout.Tab1Drink, null);

    ListView listView = (ListView) view.findViewById(R.id.drinkList); //Problem code
    listView.setAdapter(adapter);

    return view;
}