2017-08-04 63 views
0

我的MainActivity是帶有兩個選項卡的TabbedActivity,每個選項卡均由單獨的Fragment表示。第二個標籤應顯示ListView。在我的MainActivity我用這個Adapter申請我的片段:片段中的ListView不起作用

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); 
} 
} 

我得到super在那裏說之後就在LastTransactionsListAdapter錯誤「MainActivity不一個封閉的類「。它下面的六條線告訴我getLayoutInflater無法應用。如果我刪除所有ListView相關的東西,該應用程序工作得很好。我該如何解決這個問題?

+0

你的代碼有沒有意義。 'ArrayAdapter'應該描述單行,但是你想要在裏面處理整個'ListView'。 'ListView'它的多行列表,做成這樣的[link](https://tausiq.wordpress.com/2012/12/12/android-custom-adapter-listview-with-listfragment-and-loadermanager-inside -fragmentactivity /) – grabarz121

+0

@ grabarz121我很快會去看看 –

回答

1

這可能是因爲你行 -

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

這裏獲取上下文,你這樣做MainActivity.this但這不是你的MainActivity類別,而是你的片段類。

要在片段中獲取上下文,可以使用getActivity()方法調用其調用活動類。因此,將其更改爲 -

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

您的getLayoutInflater()調用的情況也是如此。此方法僅適用於活動,不適用於此片段,因此您需要執行相同的操作。使用getActivity().getLayoutInflater()

所以,你的線變成稱之爲 -

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

謝謝。我對Android/Java編程有點新,所以我不知道... –

+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; 
     } 
    }