我正在尝试将一些自定义列表适配器放入他们自己的类中,以使我的应用程序具有更少的冗余代码并使其更易于管理。
我通过 ListFragment 中的条件语句调用不同的适配器类。我最初在 ListFragment 类中有适配器,这一切都按计划工作。现在要清理所有内容并从 ListFragment 中获取所有代码,我将适配器移出并移入它们自己的类中。既然这样做了,这些方法必须是静态的,所以我可以调用它们,但是这些新类现在包含很多:
无法从 ListFragment 类型对非静态方法 setListAdapter(ListAdapter) 进行静态引用
特别是 setListAdapter、setListAdapter、getFragmentManager 和 getFragmentManager 方法。我不想要大量的 ListView Fragment 类,并且由于会重用大量代码,因此只有一个 ListFragment 并使用条件来获得正确的适配器,因此会做得更多,但我不知道如何修复这些新类所以我可以使用它们。
抱歉,解释太长了。我将尝试仅发布相关代码以了解我要完成的工作并为您提供指导。
这可以按照我这样做的方式完成吗?我该如何纠正?
如果有更好的方法,请在我的适配器类中发布一些您的解释或代码中需要更改的代码。
在我的片段的 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!!
}
适配器之一:
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);
}
});
}
}
}