Я хочу получить 2 api url от json, чтобы связать их в один listview
в android
. Один API считывает данные подробно, а другой - считывает изображение, чтобы они оба отображались в одном и том же listview
для отображения подробной информации.
Вот мой первый API, чтобы получить детализацию текста
public class NationalNewsFragment extends Fragment
{
SwipeRefreshLayout swipeRefreshLayout;
private ProgressDialog progressDialog;
ListView listView;
ImageView frontbanner;
//NEWS API
RequestQueue queue;
ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String,
String>>();
static final String KEY_TITLE = "Title";
static final String KEY_INFO1 = "info1";
static final String KEY_C_DATE = "C_date";
static final String KEY_News_ID = "News_ID";
static final String KEY_C_BY = "C_by";
static final String KEY_C_VIEWS = "C_views";
//FrontBanner API
RequestQueue requestQueue;
static final String FRONT_BANNER = "Adv";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_national_news, container,
false);
listView = (ListView)view.findViewById(R.id.list_source);
swipeRefreshLayout =
(SwipeRefreshLayout)view.findViewById(R.id.refresh_layout);
//NEWS API
queue = Volley.newRequestQueue(getContext());
requestQueue = Volley.newRequestQueue(getContext());
progressDialog = new ProgressDialog(getContext());
progressDialog.setMessage("Loading...");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
String url = "my api url here";
JsonArrayRequest jsonArrayRequest = new
JsonArrayRequest(Request.Method.GET, url, null,
new Response.Listener<JSONArray>()
{
@Override
public void onResponse(JSONArray response)
{
for (int i = 0; i < response.length(); i++)
{
try
{
JSONObject news = response.getJSONObject(i);
HashMap<String, String> map = new
HashMap<String, String>();
map.put(KEY_TITLE,
news.optString(KEY_TITLE).toString());
map.put(KEY_INFO1,
news.optString(KEY_INFO1).toString());
map.put(KEY_C_DATE,
news.optString(KEY_C_DATE).toString());
map.put(KEY_News_ID,
news.optString(KEY_News_ID).toString());
map.put(KEY_C_BY,
news.optString(KEY_C_BY).toString());
map.put(KEY_C_VIEWS,
news.optString(KEY_C_VIEWS).toString());
//System.out.println(news.optString(KEY_TITLE).toString());
dataList.add(map);
ListNewsAdapter adapter = new
ListNewsAdapter(getActivity(), dataList);
listView.setAdapter(adapter);
} catch (JSONException e)
{
e.printStackTrace();
}
}
progressDialog.cancel();
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
error.printStackTrace();
}
});
queue.add(jsonArrayRequest);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent i = new Intent(getActivity(),
FreshNewsDetailActivity.class);
i.putExtra("News_ID", dataList.get(position).get(KEY_News_ID));
startActivity(i);
//Toast.makeText(MainActivity.this,
dataList.get(position).get(KEY_News_ID), Toast.LENGTH_SHORT).show();
}
});
//Refresh layout
swipeRefreshLayout.setOnRefreshListener(new
SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(false);
progressDialog = new ProgressDialog(getContext());
progressDialog.setMessage("Loading...");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
String url = "my api url here";
JsonArrayRequest jsonArrayRequest = new
JsonArrayRequest(Request.Method.GET, url, null,
new Response.Listener<JSONArray>()
{
@Override
public void onResponse(JSONArray response)
{
for (int i = 0; i < response.length(); i++)
{
try
{
JSONObject news =
response.getJSONObject(i);
HashMap<String, String> map = new
HashMap<String, String>();
map.put(KEY_TITLE,
news.optString(KEY_TITLE).toString());
map.put(KEY_INFO1,
news.optString(KEY_INFO1).toString());
map.put(KEY_C_DATE,
news.optString(KEY_C_DATE).toString());
map.put(KEY_News_ID,
news.optString(KEY_News_ID).toString());
//System.out.println(news.optString(KEY_TITLE).toString());
dataList.add(map);
ListNewsAdapter adapter = new
ListNewsAdapter(getActivity(), dataList);
listView.setAdapter(adapter);
} catch (JSONException e)
{
e.printStackTrace();
}
}
progressDialog.cancel();
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
error.printStackTrace();
}
});
queue.add(jsonArrayRequest);
listView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent i = new Intent(getActivity(),
FreshNewsDetailActivity.class);
i.putExtra("News_ID",
dataList.get(position).get(KEY_News_ID));
startActivity(i);
//Toast.makeText(MainActivity.this,
dataList.get(position).get(KEY_News_ID), Toast.LENGTH_SHORT).show();
}
});
}
});
return view;
}
}
Вот мой код адаптера данных. Должен ли я использовать один adapter
? Если так, как объединить два источника данных в один и тот же адаптер данных. Или я должен использовать 2 dataAdapter и как связать два dataAdapter в один ListView
в Android
?
class ListNewsAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
public ListNewsAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ListNewsViewHolder holder = null;
if (convertView == null)
{
holder = new ListNewsViewHolder();
convertView =
LayoutInflater.from(activity).inflate(R.layout.source_layout, parent,
false);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.c_by = (TextView) convertView.findViewById(R.id.c_by);
holder.c_views = (TextView) convertView.findViewById(R.id.c_views);
holder.c_date = (TextView) convertView.findViewById(R.id.c_date);
convertView.setTag(holder);
}
else
{
holder = (ListNewsViewHolder) convertView.getTag();
}
holder.title.setId(position);
holder.c_by.setId(position);
holder.c_views.setId(position);
holder.c_date.setId(position);
HashMap<String, String> song = new HashMap<String, String>();
song = data.get(position);
try
{
holder.c_by.setText("ដោយ
"+song.get(NationalNewsFragment.KEY_C_BY));
holder.c_views.setText("/
"+song.get(NationalNewsFragment.KEY_C_VIEWS)+" views");
String sourceString = "<p align=\\\"justify\\\"><b><font
color=#000000>" + song.get(NationalNewsFragment.KEY_TITLE) + "</font></b> "
+ song.get(NationalNewsFragment.KEY_INFO1)+"</p>";
holder.title.setText(Html.fromHtml(sourceString));
holder.c_date.setText("ថ្ងៃទី ៖
"+song.get(NationalNewsFragment.KEY_C_DATE));
}
catch(Exception e) {}
return convertView;
}
}
class ListNewsViewHolder
{
TextView title, info1, c_date, c_by, c_views;
}