android中自定义列表视图上单个列表的预览/详细信息
我是Android新手,正在使用自定义列表视图,它工作得非常好,但问题是当我单击单个列表以显示列表的详细信息时,每次它只显示最后一个列表的详细信息。在onItemClick方法中,每。。。这是代码android中自定义列表视图上单个列表的预览/详细信息,android,Android,我是Android新手,正在使用自定义列表视图,它工作得非常好,但问题是当我单击单个列表以显示列表的详细信息时,每次它只显示最后一个列表的详细信息。在onItemClick方法中,每。。。这是代码 try { //*** Getting Array of Attributes attributes = jsonreturn.getJSONObject(TAG_ATTRIBUTE); String status = attribute
try {
//*** Getting Array of Attributes
attributes = jsonreturn.getJSONObject(TAG_ATTRIBUTE);
String status = attributes.getString(TAG_VALIDCODE);
JSONObject invoices = jsonreturn.getJSONObject(TAG_INVOICELIST);
JSONArray invoice = invoices.getJSONArray(TAG_INVOICE);
if(status.equals("200")){
// looping through All Invoice
for(int i = 0; i < invoice.length(); i++)
{
JSONObject c = invoice.getJSONObject(i);
//***** Storing each JSON item in variable
JSONObject client = c.getJSONObject(TAG_CLIENT);
String organization = client.getString(TAG_ORGANIZATION);
String invoiceno = c.getString(TAG_ID);
String date = c.getString(TAG_DATE);
String currency = c.getString(TAG_CURRENCY);
String outstanding = c.getString(TAG_OUTSTANDING);
String invoice_status = c.getString(TAG_STATUS);
invoice_id = c.getString(TAG_INVOICE_ID);
//**** creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
//*** adding each child node to HashMap key => value
map.put(TAG_ORGANIZATION, organization);
map.put(TAG_ID, invoiceno);
map.put(TAG_DATE, date);
map.put(TAG_CURRENCY, currency);
map.put(TAG_OUTSTANDING, outstanding);
map.put(TAG_STATUS, invoice_status);
map.put(TAG_INVOICE_ID, invoice_id);
//**** adding HashList to ArrayList
invoiceList.add(map);
}
}
else{
Toast.makeText(this, "Invalid Details", 1000).show(); }
}
catch (JSONException e)
{
e.printStackTrace();
}
/**
Updating parsed JSON data into ListView
* */
InvoiceListAdapter invoiceadapter = new InvoiceListAdapter(this, invoiceList);
mListView.setAdapter(invoiceadapter);
//****** Launching new screen on Selecting Single ListItem
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
// getting values from selected ListItem
//--String date = ((TextView) view.findViewById(R.id.date)).getText().toString();
//--String status = ((TextView) view.findViewById(R.id.invoicestatus)).getText().toString();
// Starting new intent
Intent in = new Intent(getApplicationContext(), PreviewInvoice.class);
in.putExtra("myinvoiceid", invoice_id);
in.putExtra("uniquetoken", tokenid);
//-- in.putExtra(TAG_DATE, date);
//---in.putExtra(TAG_STATUS, status);
startActivity(in);
}
});
试试看{
//***获取属性数组
attributes=jsonreturn.getJSONObject(TAG_属性);
字符串状态=attributes.getString(TAG_VALIDCODE);
JSONObject invoices=jsonreturn.getJSONObject(标记为发票列表);
JSONArray invoice=invoices.getJSONArray(TAG_invoice);
如果(状态等于(“200”)){
//循环浏览所有发票
对于(int i=0;ivalue
地图放置(标记组织,组织);
地图放置(标签ID、发票编号);
地图放置(标记日期、日期);
地图放置(标记货币、货币);
地图放置(标记突出,突出);
映射放置(标签状态、发票状态);
映射放置(标签、发票ID、发票ID);
//****将哈希列表添加到ArrayList
发票列表。添加(地图);
}
}
否则{
Toast.makeText(这是“无效的详细信息”,1000).show();}
}
捕获(JSONException e)
{
e、 printStackTrace();
}
/**
将解析的JSON数据更新到ListView中
* */
InvoiceListAdapter invoiceadapter=新的InvoiceListAdapter(此,invoiceList);
mListView.setAdapter(invoiceadapter);
//******在选择单个列表项时启动新屏幕
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
//从选定的ListItem获取值
//--字符串日期=((TextView)view.findViewById(R.id.date)).getText().toString();
//--字符串状态=((TextView)view.findViewById(R.id.invoicestatus)).getText().toString();
//开始新的意图
Intent in=新的Intent(getApplicationContext(),PreviewWinVoice.class);
in.putExtra(“myinvoiceid”,发票id);
in.putExtra(“uniquetoken”,tokenid);
//--in.putExtra(标签日期、日期);
//---in.putExtra(标签状态、状态);
星触觉(in);
}
});
我的发票列表适配器类代码
public class InvoiceListAdapter extends BaseAdapter {
//--private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public InvoiceListAdapter(ManageInvoice manageInvoice, ArrayList<HashMap<String, String>> invoiceList) {
//-- activity = manageInvoice;
data=invoiceList;
inflater = (LayoutInflater)manageInvoice.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
if(null==data){
return 0;
}
return data.size();
}
public Object getItem(int position) {
if(null==data || data.size()<=position){
return null;
}
return data.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.invoice_list, null );
TextView title = (TextView)vi.findViewById(R.id.organization);
TextView invoiceId = (TextView)vi.findViewById(R.id.invoice_id);
TextView date = (TextView)vi.findViewById(R.id.date);
TextView currency = (TextView)vi.findViewById(R.id.currency);
TextView currencyvalue = (TextView)vi.findViewById(R.id.outstanding);
TextView status = (TextView)vi.findViewById(R.id.invoice_status);
// ImageView thumb_image=(ImageView)vi.findViewById(R.id.invoice_status);
HashMap<String, String> Invoice = new HashMap<String, String>();
Invoice = data.get(position);
// Setting all values in listview
title.setText(Invoice.get(ManageInvoice.TAG_ORGANIZATION));
invoiceId.setText(Invoice.get(ManageInvoice.TAG_ID));
date.setText(Invoice.get(ManageInvoice.TAG_DATE));
currency.setText(Invoice.get(ManageInvoice.TAG_CURRENCY));
currencyvalue.setText(Invoice.get(ManageInvoice.TAG_OUTSTANDING));
status.setText(Invoice.get(ManageInvoice.TAG_STATUS));
return vi;
}
public JSONArray get(int position) {
// TODO Auto-generated method stub
return null;
}
公共类InvoiceListAdapter扩展了BaseAdapter{
//--私人活动;
私有数组列表数据;
专用静态充气机=空;
公共发票列表适配器(ManageInvoice ManageInvoice,ArrayList invoiceList){
//--活动=管理发票;
数据=发票列表;
充气器=(LayoutInflater)manageInvoice.getSystemService(Context.LAYOUT\u充气器\u服务);
}
public int getCount(){
if(null==数据){
返回0;
}
返回data.size();
}
公共对象getItem(int位置){
如果(null==data | | data.size()这是因为您的JSON对象已经迭代到invoice.length(),并且您要传递到Intent中的invoice|id和tokenid是最后一条记录的内容或值。请将JSON对象移动到所需的位置,然后从那里检索变量的值。public void-onitemclick(AdapterView父级、视图、整型位置、长id)
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
// Starting new intent
Intent in = new Intent(getApplicationContext(), PreviewInvoice.class);
in.putExtra("myinvoiceid",invoiceList.get(position).get(TAG_INVOICE_ID));
in.putExtra("uniquetoken", tokenid); // Actually I can't find your tokenId in HashMAp object
startActivity(in);
}
});
{
//开始新的意图
Intent in=新的Intent(getApplicationContext(),PreviewWinVoice.class);
in.putExtra(“myinvoiceid”,invoiceList.get(position.get(TAG_INVOICE_ID));
in.putExtra(“uniquetoken”,tokenid);//实际上我在HashMAp对象中找不到您的tokenid
星触觉(in);
}
});
因为您在onItemClick()
中引用的是发票id的静态值,所以只需从适配器定位HashMap
对象,并使用它键获取发票id的值
invoiceadapter.get(position)
它为您在ListView
中单击的位置提供了一个对象。使用keyTAG\u INVOICE\u ID
可以从HashMap对象中获取它的值。其中我移动了我的JSON对象。。请建议我应用此代码,但在我的InvoiceListAdapter类中出现一些错误:(当我在代码invoiceadapter.get(position).get(TAG_INVOICE_ID))中使用这一行时,它会要求make invoiceadapter final我这样做了,然后get方法对于InvoiceListAdapter是未定义的。当在InvoiceListAdapter中定义它时,它会显示类型JSONArray中的方法get(int)不适用于参数(字符串),现在我得到消息“method get”类型对象“on.get(TAG_INVOICE_ID))(String)未定义;您也可以使用此行..invoiceList.get(position).get(TAG_INVOICE_ID);尝试此..并查看我编辑的答案。如果此答案解决了您的问题,您可以将其作为正确答案接受。这也将帮助您和其他用户。。