我的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
相关内容,那么该应用就可以了。我该如何解决这个问题?
答案 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);