Fragment中的ListView不起作用

时间:2017-08-04 13:53:22

标签: android listview android-fragments

我的MainActivity是一个TabbedActivity,有两个标签,每个标签由一个Fragment个人代表。第二个标签应显示ListView。在我的MainActivity中,我使用此Adapter来应用我的片段:

public class SectionsPagerAdapter extends FragmentPagerAdapter {
    public SectionsPagerAdapter(FragmentManager fm) {
        super (fm);
    }
    @Override
    public Fragment getItem(int position) {
        Fragment fragment =null;
        switch (position) {
            case 0:
                fragment = Fragment.instantiate(MainActivity.this, Fragment2.class.getName());
                break;
            case 1:
                fragment = Fragment.instantiate(MainActivity.this, Fragment2.class.getName());
                break;
        }
        return fragment;
    }

    public int getCount() {
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Tab1";
            case 1:
                return "Tab2";
        }
        return null;
    }
}

这是Fragment2 class

public class Fragment2 extends Fragment {
protected List<Transaction> myTransactions = new ArrayList<Transaction>();
private Context mContext;
DatabaseHelper DBH = new DatabaseHelper(mContext);
String DepositInputValue, DepositInputDate, DepositInputNote;

private static final String ARG_SECTION_NUMBER = "section_number";

public AssetsOverviewList() {
}

public static Fragment2 newInstance(int sectionNumber) {
    Fragment2 fragment = new Fragment2();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, sectionNumber);
    fragment.setArguments(args);
    return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_2, container, false);
    return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    Cursor res = DBH.getAllData();
    if (res.getCount() == 0) {
        //do something
        return;
    }
    StringBuffer buffer = new StringBuffer();
    while (res.moveToNext()) {
        buffer.append("Value :" + res.getString(1) + "\n");
        buffer.append("Date  :" + res.getString(2) + "\n");
        buffer.append("Note  :" + res.getString(3) + "\n\n");
    }
    // Show all data
    showMessage("Data", buffer.toString());

    while (res.moveToNext()) {


        DepositInputValue = res.getString(1);
        DepositInputDate = res.getString(2);
        DepositInputNote = res.getString(3);
    }
}

private class LastTransactionsListAdapter extends ArrayAdapter<Transaction> {
    public LastTransactionsListAdapter() {
        super(MainActivity.this, R.layout.transaction_list_view, myTransactions);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View itemView = convertView;
        if (itemView == null) {
            itemView = getLayoutInflater().inflate(R.layout.transaction_list_view, parent, false);
        }
        Transaction currentTransaction = myTransactions.get(position);
        return itemView;
    }
}
private void populateListView() {
    ArrayAdapter<Transaction> adapter = new LastTransactionsListAdapter();
    ListView list = (ListView) list.findViewById(last_transactions_listView);
    list.setAdapter(adapter);
}
}

我在LastTransactionsListAdapter后面的super收到错误,其中显示的是&#39; MainActivity不是封闭的类&#39;。它下面的六行告诉我getLayoutInflater无法应用。如果我删除了所有ListView相关内容,那么该应用就可以了。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

尝试使用以下适配器

private class LastTransactionsListAdapter extends ArrayAdapter<Transaction> {
        public LastTransactionsListAdapter() {
            super(getActivity(), R.layout.transaction_list_view, myTransactions);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View itemView = convertView;
            if (itemView == null) {
                itemView = getActivity().getLayoutInflater().inflate(R.layout.transaction_list_view, parent, false);
            }
            Transaction currentTransaction = myTransactions.get(position);
            return itemView;
        }
    }

答案 1 :(得分:1)

这可能是因为你的行 -

super(MainActivity.this, R.layout.transaction_list_view, myTransactions);

这里为了获取上下文,你已经完成了MainActivity.this,但这不是你的MainActivity类,而是你的Fragment类。

要在Fragment中获取上下文,可以使用getActivity()方法调用其调用活动类。所以将其更改为 -

super(getActivity(), R.layout.transaction_list_view, myTransactions);

您的getLayoutInflater()电话也是如此。此方法仅适用于活动而非片段,因此您也需要执行相同的操作。使用getActivity().getLayoutInflater()

进行调用

所以你的线路变成了 -

itemView = getActivity().getLayoutInflater().inflate(R.layout.transaction_list_view, parent, false);