2013-03-13 19 views
0

我不知道如何通過單擊基於listview的下一個/上一個按鈕來顯示下一個/上一個詳細數據。從列表視圖獲取下一個和上一個詳細數據

這是我想做的事情

My listview Activity

My Detail data Activity,顯示從列表視圖下/上一數據截圖

編輯:我有一個列表視圖數據(使用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」 從列表視圖項顯示詳細數據:

@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的下一個/上一個詳細數據。 請幫助我的人......

預先感謝

回答

3

剛剛在最新帖子上看到您的請求。

Parvaz給出的解決方案是完美的,你只需要弄清代碼。 你有一個arraylist「PremiumList」,它負責你的listview行數據。 您只需將位置和此列表傳遞給Detail_toko.class(通過意圖使用parceable或將arraylist聲明爲靜態(不推薦)等),您的解決方案將在幾步之外。

在Detail_toko.class中創建一個全局變量currentPosition,它將從TAG_NAMATOKO等意向過去的活動中獲取其值。 然後在onClickListener的NEXT按鈕增加1到currentPosition,並從剛剛從最後一次活動傳輸的數組列表中獲取詳細信息,就像您在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,您所需要的只是position和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方法,它會使你的適配器 「的efficent適配器」。 (搜索示例) 按照命名約定和所有。 在使用它們和bundle.containKey等東西之前檢查anyObject!= null,它們的大小或長度以避免像nullPointerException這樣的致命異常。

+0

好的...謝謝Mr.Sourab Sharma ... :) 我會盡量像你的步驟...謝謝b4 ... – Arsyah 2013-03-13 10:20:47

+0

嗨,Mr.Sourab Sharma,我已經花了我四天的時間學習如何解決我對來自listview的下一個/上一個詳細數據的問題。我按照你的指示,我做了一些功能,我有currentposition,totaldata和列表視圖中的Arraylist「PremiumList」,所以當我按下一個/上一個按鈕時,索引/位置的值會相應更新,當我們按下最後一個索引中的按鈕,它將顯示烤麪包的「最後一個記錄」。我做了這個功能,但我的詳細數據仍然沒有改變... :( 我在做什麼錯了?我失蹤了什麼? 我已經編輯我的代碼,請查看Mr.Sourab Sharma – Arsyah 2013-03-18 09:52:52

+0

First非常感謝你的回答和建議Mr.Sourab Sharma,對你的所有幫助都無言以對,你是我在Android編程中的好老師...... :) 但是,「Detail_toko」中有一個錯誤,活動.. in line「detail = list.get(currentposition);」編輯說:「類型不匹配:不能從字符串轉換爲HashMap 」 我失蹤了什麼? – Arsyah 2013-03-19 07:19:10

0

只需通過PremiumList的ArrayList您Detail_toko活動......無論是意圖傳遞或直接從getter方法得到它。然後在每個下一個/上一個按鈕的Detail_toko活動中,單擊增加arraylist的位置以獲取數據,然後相應填充。

這是你將如何傳遞和 Passing ArrayList through Intent

不是得到來自意圖其餘數據從ArrayList中獲取數據ArrayList中。

like 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); 
+0

感謝您的答案@帕爾瓦茲,但我是一個新手在機器人..... 我仍然困惑... 你能告訴我的代碼... :) – Arsyah 2013-03-13 04:26:37

+0

確定....我知道了,如何將活動1中的「PremiumList」傳遞給活動2 但是,如何使下一個/上一個按鈕功能顯示數據....對不起... :( – Arsyah 2013-03-13 04:49:08

+0

嗨@Parvaz,我的listview數據使用HashMap的......它傳遞 「PremiumList」 到另一個活動時使用有問題 「意向書I = getIntent(); PremiumList = i.getStringArrayListExtra(」 PremiumList 「);」 如何解決這個問題 ? D – Arsyah 2013-03-13 07:38:41

相關問題