java如何通过解决错误“活动无法转换为片段”将片段传递给类构造函数?
我有导航抽屉->;如果我单击导航抽屉中的项目,它会打开一个单独的片段,其中有两个选项卡,分别名为“列表”和“照片”
我的目标是,当我单击第一个选项卡(即“列表选项卡”)时,我试图调用“Listclassfragment类”,它必须显示listview。当我单击或滑动第二个选项卡(即照片选项卡)时,将调用“photosfragment”类,它必须在网格中显示照片。我正在使用这个PageRada
当我尝试处理ListClassFragment时,我得到了错误
Error : incompatible types: Activity cannot be converted to ListClassFragment
ListClassFragment类:
public class ListClassFragment extends Fragment {
private ListView listview;
private ArrayList<ListView_Model> books;
private ArrayAdapter<ListView_Model> adapter;
private final static String TAG = ListClassFragment.class.getSimpleName();
private final static String url = "http://myfee.org/apps/customer?id=1";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.activity_listview, container, false);
listview = (ListView) view.findViewById(R.id.listview);
setListViewAdapter();
getDataFromInternet();
return view;
}
private void getDataFromInternet() {
new GetJsonFromUrlTask(getActivity(), url).execute();
}
private void setListViewAdapter() {
books = new ArrayList<ListView_Model>();
adapter = new CustomListViewAdapter(getActivity(), R.layout.item_listview, books);
listview.setAdapter(adapter);
}
//parse response data after asynctask finished
public void parseJsonResponse(String result) {
Log.i(TAG, result);
try {
JSONObject json = new JSONObject(result);
JSONArray jArray = new JSONArray(json.getString("customer"));
for (int i = 0; i < jArray.length(); i++) {
JSONObject jObject = jArray.getJSONObject(i);
ListView_Model book = new ListView_Model();
book.setName(jObject.getString("name"));
book.setAuthorName(jObject.getString("email"));
book.setPhoneNo(jObject.getString("phone_no"));
/*Pay Button here*/
book.setImageUrl1(R.drawable.custom_button);
books.add(book);
}
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}}
GetJsonFromUrlTask类:
public class GetJsonFromUrlTask extends AsyncTask<Void, Void, String> {
private Activity activity;
private String url;
private ProgressDialog dialog;
private final static String TAG = GetJsonFromUrlTask.class.getSimpleName();
public GetJsonFromUrlTask(Activity activity, String url) {
super();
this.activity = activity;
this.url = url;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progress dialog
dialog = new ProgressDialog(activity);
// Set progress dialog title
dialog.setTitle("Loading Datas....");
// Set progress dialog message
dialog.setMessage("Please wait!!");
dialog.setIndeterminate(false);
// Show progress dialog
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
// call load JSON from url method
return loadJSON(this.url).toString();
}
@Override
protected void onPostExecute(String result) {
((ListClassFragment) activity).parseJsonResponse(result);
dialog.dismiss();
Log.i(TAG, result);
}
public JSONObject loadJSON(String url) {
// Creating JSON Parser instance
JSONGetter jParser = new JSONGetter();
// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url);
return json;
}
private class JSONGetter {
private InputStream is = null;
private JSONObject jObj = null;
private String json = "";
// constructor
public JSONGetter() {
}
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"),
8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}}
# 1 楼答案
最好使用回调(接口)来实现。下面是一个例子
调用可以如下所示,也可以通过
NetworkCallback
直接implements
调用片段根据需要修改界面
# 2 楼答案
尝试将片段传递给类构造函数。像这样更改代码
在ListClassFragment类中: