我不知道如何通过单击基于listview的下一个/上一个按钮来显示下一个/上一个详细数据的功能。
这是我想要的截图
My Detail data Activity,显示listview的下一个/上一个数据
编辑:我有一个listview数据(使用xml解析器),并将数据传递给名为“Detail_toko.class”的新活动:
List<NameValuePair> paramemeter = new ArrayList<NameValuePair>();
paramemeter.add(new BasicNameValuePair("keyword", "a"));
// paramemeter.add(new BasicNameValuePair("kategori",Category.getSelectedItem().toString()));
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL, paramemeter); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(TAG_DETAIL);
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(TAG_ID, parser.getValue(e, TAG_ID));
map.put(TAG_NAMATOKO, parser.getValue(e, TAG_NAMATOKO));
map.put(TAG_KATEGORI, parser.getValue(e, TAG_KATEGORI));
map.put(TAG_EMAIL, parser.getValue(e, TAG_EMAIL));
map.put(TAG_ICON, parser.getValue(e, TAG_ICON));
// adding HashList to ArrayList
PremiumList.add(map);
}
return null;
}
/**
* Updating parsed JSON data into ListView
* */
list=(ListView)findViewById(R.id.listview);
if(PremiumList.size() > 0)
{
adapter=new LazyAdapterStore(ListPerusahaan.this, PremiumList);
list.setAdapter(adapter);
}
else
{
Toast toast= Toast.makeText(getApplicationContext(), "No data found, enter another keyword", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String nama_toko = ((TextView) view.findViewById(R.id.nama_toko)).getText().toString();
String kategori = ((TextView) view.findViewById(R.id.kategori)).getText().toString();
String email = ((TextView) view.findViewById(R.id.email)).getText().toString();
PremiumList = new ArrayList<HashMap<String, String>>();
Intent in = new Intent(ListPerusahaan.this, Detail_toko.class);
in.putExtra("PremiumList", PremiumList);
//in.putStringArrayListExtra( "PremiumList", PremiumList );
in.putExtra("position", position);
in.putExtra("TotalData", TotalData);
in.putExtra(TAG_NAMATOKO, nama_toko);
in.putExtra(TAG_KATEGORI, kategori);
in.putExtra(TAG_EMAIL, email);
startActivity(in);
这是我的LazyAdapterStore代码:
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_data_store, null);
TextView nama_toko = (TextView)vi.findViewById(R.id.nama_toko); // title
TextView kategori = (TextView)vi.findViewById(R.id.kategori); // title
ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image
TextView email = (TextView)vi.findViewById(R.id.email); // artist name
HashMap<String, String> detail = new HashMap<String, String>();
detail = data.get(position);
// Setting all values in listview
nama_toko.setText(detail.get(ListPerusahaan.TAG_NAMATOKO));
kategori.setText(detail.get(ListPerusahaan.TAG_KATEGORI));
email.setText(detail.get(ListPerusahaan.TAG_EMAIL));
imageLoader.DisplayImage(detail.get(ListPerusahaan.TAG_ICON), thumb_image);
return vi;
}
编辑:,这是我的新活动“Detail_Toko”,用于显示listview项目的详细数据:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this must be called BEFORE setContentView
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.detail_toko);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
call_btn=(Button)findViewById(R.id.call);
email_btn=(Button)findViewById(R.id.email);
sms_btn=(Button)findViewById(R.id.sms);
Next_btn=(Button)findViewById(R.id.Next);
Prev_btn=(Button)findViewById(R.id.Prev);
phonenumber=(TextView)findViewById(R.id.telpon);
// getting intent data
Intent in = getIntent();
// @SuppressWarnings("unchecked")
//ArrayList<HashMap<String, String>> PremiumList = (ArrayList<HashMap<String, String>>) getIntent().getSerializableExtra("PremiumList");
// Get String values from previous intent
final String nama_toko = in.getStringExtra(TAG_NAMATOKO);
final String kategori = in.getStringExtra(TAG_KATEGORI);
final String email = in.getStringExtra(TAG_EMAIL);
// Get Int values from previous intent
final int posisi = in.getExtras().getInt("position");
final int Total_data = in.getExtras().getInt("TotalData");
/*
Bundle bundle = in.getExtras();
HashMap<String, String> list = (HashMap<String, String>) bundle.getSerializable("PremiumList");
list = data.get(currentposition);
*/
Bundle bundle = in.getExtras();
HashMap<String, String> list = (HashMap<String, String>) bundle.getSerializable("PremiumList");
list = data.get(currentposition);
// Displaying all values on the screen
lblPosisi = (TextView) findViewById(R.id.namatoko);
lbltotaldata = (TextView) findViewById(R.id.nama);
lblNamatoko = (TextView) findViewById(R.id.nama_toko);
lblKategori = (TextView) findViewById(R.id.kategori);
lblEmail = (TextView) findViewById(R.id.textemail);
lblPosisi.setText(String.valueOf(posisi));
lbltotaldata.setText(String.valueOf(Total_data));
lblNamatoko.setText(nama_toko);
lblKategori.setText(kategori);
lblEmail.setText(email);
// Set the int value of currentposition from previous selected listview item
currentposition = posisi;
Next_btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
if(currentposition >= Total_data - 1)
{
Toast toast= Toast.makeText(getApplicationContext(), "Last Record", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
else
{
currentposition++;
lblPosisi.setText(String.valueOf(currentposition));
lblNamatoko.setText(list.get(nama_toko));
lblKategori.setText(list.get(kategori));
lblEmail.setText(list.get(email));
}
}
});
Prev_btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
if(currentposition <= 0)
{
Toast toast= Toast.makeText(getApplicationContext(), "First Record", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
else
{
currentposition--;
lblPosisi.setText(String.valueOf(currentposition));
lblNamatoko.setText(list.get(nama_toko));
lblKategori.setText(list.get(kategori));
lblEmail.setText(list.get(email));
}
}
});
问题是,我不知道如何通过单击“Detail_toko”活动中的下一个/上一个按钮来创建一个函数来显示listview中的下一个/上一个详细数据。 请有人帮助我......
提前感谢
答案 0 :(得分:3)
刚刚在上一篇文章中看到了您的请求。
Parvaz提供的解决方案非常完美,您只需要弄清楚代码。 你有一个arraylist“PremiumList”,它负责你的listview行数据。 您所需要的只是将位置和此列表传递给Detail_toko.class(通过意图使用parceable或声明arraylist作为静态(不推荐)等)并且您的解决方案将在几步之后。
在Detail_toko.class中创建一个全局变量currentPosition,它将从意图的TAG_NAMATOKO过去的活动中获取其值。 然后在NEXT按钮的onClickListener中将1递增到currentPosition,并从刚刚从上一个活动传输的arraylist获取详细信息,就像在getView方法中一样。
HashMap<String, String> detail = new HashMap<String, String>();
detail = data.get(currentPosition);
// Setting all values in listview
nama_toko = detail.get(ListPerusahaan.TAG_NAMATOKO);
kategori = detail.get(ListPerusahaan.TAG_KATEGORI);
email = detail.get(ListPerusahaan.TAG_EMAIL);
设置这些值,您的新视图将相应更新。
在PREVIOUS按钮的onClickListener中,从currentPosition减少1,后跟相同的代码(这意味着你必须创建一个方法并调用它,不重复代码)。
试试吧。这是我们可以解释的详细信息,而不是实际做功课!
编辑:
首先从OnItemClick
中删除此行 PremiumList = new ArrayList<HashMap<String, String>>();
您正在清除此行中PremiumList的所有数据,这样您将在下一个活动中获得空白列表。所以摆脱这条线。 一旦你在下一个活动中获得PremiumList,你需要的就是位置和totalData以及额外的intent。 您可以从额外的意图中删除TAG_NAMATOKO,TAG_KATEGORI,TAG_EMAIL。
我曾告诉过你不要重复这段代码,因为你是初学者,因为它会让你的生活变得轻松,因此非常重要。 采取这些考虑并使你的习惯。
现在,“Detail_Toko”中的代码将变为:
HashMap<String, String> list = null;
int currentposition = 0;
int Total_data =0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this must be called BEFORE setContentView
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.detail_toko);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
call_btn=(Button)findViewById(R.id.call);
email_btn=(Button)findViewById(R.id.email);
sms_btn=(Button)findViewById(R.id.sms);
Next_btn=(Button)findViewById(R.id.Next);
Prev_btn=(Button)findViewById(R.id.Prev);
phonenumber=(TextView)findViewById(R.id.telpon);
// Displaying all values on the screen
lblPosisi = (TextView) findViewById(R.id.namatoko);
lbltotaldata = (TextView) findViewById(R.id.nama);
lblNamatoko = (TextView) findViewById(R.id.nama_toko);
lblKategori = (TextView) findViewById(R.id.kategori);
lblEmail = (TextView) findViewById(R.id.textemail);
// getting intent data
Bundle bundle = getIntent().getExtras();
// Get Int values from previous intent
currentposition = bundle.getInt("position");
Total_data = bundle.getInt("TotalData");
list = (HashMap<String, String>) bundle.get("PremiumList");
setView();
Next_btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
if(currentposition >= Total_data - 1)
{
Toast toast= Toast.makeText(getApplicationContext(), "Last Record", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
else
{
currentposition++;
setView();
}
}
});
Prev_btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
if(currentposition <= 0)
{
Toast toast= Toast.makeText(getApplicationContext(), "First Record", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
else
{
currentposition--;
setView();
}
}
});
private void setView()
{
if(list != null && list.size() > currentposition)
{
HashMap<String, String> detail = new HashMap<String, String>();
detail = list.get(currentposition);
lblPosisi.setText(String.valueOf(currentposition));
lbltotaldata.setText(String.valueOf(Total_data));
lblNamatoko.setText(detail.get(ListPerusahaan.TAG_NAMATOKO));
lblKategori.setText(detail.get(ListPerusahaan.TAG_KATEGORI));
lblEmail.setText(detail.get(ListPerusahaan.TAG_EMAIL));
}
}
建议:使用ViewHolder在getView方法中填充视图,它将使您的适配器成为“一个高效的适配器”。 (搜索示例) 遵循命名约定和所有。 在使用它们之前检查anyObject!= null,它们的大小或长度以及bundle.containKey等东西,以避免像nullPointerException这样的致命异常。
答案 1 :(得分:0)
只需将PremiumList ArrayList传递给您的Detail_toko活动...或者通过Intent传递它,或者直接从getter方法获取它。然后在每个下一个/上一个按钮的Detail_toko活动中,单击增加arraylist的位置以获取数据,然后相应地填充。
这是你传递arraylist的方法 Passing ArrayList through Intent
而不是从intent获取其余数据而不是从arraylist获取数据。
喜欢arraylist.get(index)。
就像这样
/********Instead of getting your values like this*******************/
String nama_toko = in.getStringExtra(TAG_NAMATOKO);
String kategori = in.getStringExtra(TAG_KATEGORI);
String email = in.getStringExtra(TAG_EMAIL);
/ ************************使用此处给出的方法How to do the next button action? *********** ***************** /
//The method setvalue would be quite useful for you where you will pass the int j parameter to get appropriate values. If next button is clicked increment the j if previous button is clicked decrement it. and then display your values asusual.
// Displaying all values on the screen
lblNamatoko = (TextView) findViewById(R.id.namatoko);
lblKategori = (TextView) findViewById(R.id.kategori);
lblEmail = (TextView) findViewById(R.id.textemail);
lblNamatoko.setText(nama_toko);
lblKategori.setText(kategori);
lblEmail.setText(email);