Getting Next and Previous Detail Data from listview

廉价感情. 提交于 2019-11-29 05:22:59

Just seen your request on last post.

Solution given by Parvaz is perfect, you just need to figure out the code. You have an arraylist "PremiumList" which is responsible for your listview rows data. All you need is to pass position and this list to Detail_toko.class (via intent using parceable or declaring arraylist as static (not recommended) etc. ) and your solution will be couple of steps away.

In Detail_toko.class create a global variable currentPosition which will get its value from past activity like TAG_NAMATOKO from intent. Then in onClickListener of NEXT button increment 1 to currentPosition and get detail from your arraylist you have just transported from last activity as you have done in your getView method.

 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);

Set these values and your new view will be updated accordingly.

In onClickListener of PREVIOUS button decrement 1 from currentPosition, followed by same code (which means you must create a method and call that, no code repetition).

Try it. This is as detailed as we can explain without actually doing your homework !

EDIT :

First of all remove this line from OnItemClick

 PremiumList = new ArrayList<HashMap<String, String>>();

You are clearing all the data from PremiumList in this line and this way you will get blank list in next activity. So get rid of this line. Once you will get PremiumList in your next activity, all you need is position and totalData along with it in intent extra. You can get rid of TAG_NAMATOKO, TAG_KATEGORI,TAG_EMAIL from your intent extra.

I had told you to not to repeat the code, as you are beginner it is very important for you to follow as it will make your life easy by taking such considerations and making your habbit.

Now your code in "Detail_Toko" will become:

 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));
    }
    }

Suggestion: Use ViewHolder to populate view in getView Method, it will make your adapter "An efficent adapter". (search for examples) Follow naming convention and all. Check anyObject != null , their size or length before using them and bundle.containKey etc stuff to avoid fatal exception like nullPointerException.

Parvaz Bhaskar

Just pass the PremiumList ArrayList to your Detail_toko Activity...either pass it by Intent or get it directly from the getter methods. Then in your Detail_toko activity on each next / previous button click increment the position of arraylist to get the data and then populate accordingly.

This is how you will pass your arraylist Passing ArrayList through Intent

and instead of getting the rest of the data from intent get the data from the arraylist.

like arraylist.get(index).

just like this

  /********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);

/************************Use a method like given here 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);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!