アプリのコードの冗長性を減らし、管理しやすくするために、いくつかのカスタム リスト アダプターを独自のクラスに入れようとしています。
ListFragment 内の条件ステートメントを使用して、さまざまなアダプター クラスを呼び出します。私はもともと ListFragment クラスにアダプターを持っていましたが、これはすべて計画どおりに機能しました。ここで、すべてをクリーンアップして ListFragment からすべてのコードを取得するために、アダプターを独自のクラスに移動しました。それが完了してから、これらのメソッドを呼び出すことができるようにこれらのメソッドを静的にする必要がありますが、これらの新しいクラスには多くのものが含まれるようになりました。
ListFragment 型から非静的メソッド setListAdapter(ListAdapter) への静的参照を作成できません
具体的には、setListAdapter、setListAdapter、getFragmentManager、および getFragmentManager メソッドです。大量の ListView Fragment クラスは必要ありません。多くのコードが再利用されるため、ListFragment を 1 つだけ持ち、条件を使用して正しいアダプターを取得することで、より多くのことができますが、これらの新しいクラスを修正する方法がわかりません。だから私はそれらを使うことができます。
長い説明で申し訳ありません。関連するコードのみを投稿して、私が達成しようとしていることのアイデアを得て、あなたが私を導くようにします.
これは私がやっている方法で行うことができますか?どうすれば修正できますか?
より良い方法がある場合は、アダプタークラス内で変更する必要があるコードまたは説明を含むコードを投稿してください。
私のフラグメントの onActivityCreated で:
. . .
// Get the string to query from last Fragment and pass it to this
// Fragment
Bundle args = this.getArguments();
boolean rawRes = args.getBoolean(KEY_IS_RAW_RES);
String url = args.getString(KEY_URL);
int fileName = args.getInt(KEY_RES_FILE);
this.getJsonFile(url, rawRes, fileName);
}
public void getJsonFile(String url, boolean rawRes, int fileName) {
if (rawRes == true) {
getFromRawRes(fileName);
} else {
getFromURL(url);
}
}
public void getFromRawRes(int fileName) {
InputStream file = getResources().openRawResource(fileName);
JSONParser jParser = new JSONParser();
JSONArray json = jParser.getJSONFromRes(file);
ListAdapter_SevenItem.callback(json, context);//<--THIS IS A CALL TO THE ADAPTER!!
}
アダプターの 1 つ:
public class ListAdapter_SevenItem extends ListViewFragment {
. . .
public static void callback(JSONArray json, Context c) {
if (json != null) {
// Hashmap for ListView
. . .
// create the list item mapping
String[] from = new String[]{TAG_LABEL, TAG_TITLE, TAG_DISCR, TAG_RES_FILE, TAG_IS_RAW_RES, TAG_CONT_ID};
int[] to = new int[]{R.id.listLabel, R.id.listTitle, R.id.listDiscription, R.id.listResFile, R.id.listIsRawRes, R.id.listContID};
// Updating parsed JSON data into ListView
SimpleAdapter adapter = new SimpleAdapter(c, mList, R.layout.list_item, from, to);
setListAdapter(adapter);
// selecting single ListView item
final ListView lv = setListAdapter();
// Launching new screen on Selecting Single ListItem
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
MainActivity.mLayout.toggleSidebar();
setHasOptionsMenu(true);
FragmentManager fm = getFragmentManager();
final FragmentTransaction lcFT = fm.beginTransaction();
lcFT.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);
final Bundle args = new Bundle();
String resFile = ((TextView) view.findViewById(R.id.listResFile)).getText().toString();
int passResFile = getFragmentManager().getIdentifier(resFile, "raw", "com.andaero.app");
args.putInt("KEY_RES_FILE", passResFile);
boolean isRawRes = true;
args.putBoolean("KEY_IS_RAW_RES", isRawRes);
// Delayed to improve animations
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
ListViewFragment lvf = new ListViewFragment();
lcFT.replace(R.id.listContainer, lvf).commit();
lvf.setArguments(args);
}
}, 300);
}
});
}
}
}