Получение следующих и предыдущих подробных данных из списка

Я не знаю, как сделать функцию для отображения следующих / предыдущих подробных данных, нажав кнопку "следующий / предыдущий" на основе списка.

Это скриншот, который я хочу сделать

Мой просмотр списка

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". Пожалуйста, кто-нибудь, помогите мне...

Заранее спасибо

2 ответа

Решение

Только что видел ваш запрос в последнем посте.

Решение, данное Parvaz, является идеальным, вам просто нужно выяснить код. У вас есть массив "PremiumList", который отвечает за ваши данные в строках списка. Все, что вам нужно, это передать позицию и этот список в Detail_toko.class (через намерение, используя разбираемый или объявив массив как статический (не рекомендуется) и т. Д.), И ваше решение будет в нескольких шагах.

В Detail_toko.class создайте глобальную переменную currentPosition, которая получит свое значение из прошлой активности, например, TAG_NAMATOKO, из намерения. Затем в onClickListener of 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);

Установите эти значения, и ваш новый вид будет обновлен соответствующим образом.

В onClickListener PREVIOUS кнопка уменьшается на 1 от currentPosition, после чего следует тот же код (что означает, что вы должны создать метод и вызывать его, без повторения кода).

Попытайся. Это настолько подробно, насколько мы можем объяснить, фактически не делая вашу домашнюю работу!

РЕДАКТИРОВАТЬ:

Прежде всего удалите эту строку из OnItemClick

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

Вы удаляете все данные из PremiumList в этой строке, и таким образом вы получите пустой список в следующем действии. Так что избавьтесь от этой линии. Как только вы получите PremiumList в вашем следующем занятии, все, что вам нужно, это позиция и totalData вместе с ним в намерении дополнительно. Вы можете избавиться от 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.

Просто передайте PremiumList ArrayList в Activity_toko Activity... либо передайте его по Intent, либо получите его напрямую из методов получения. Затем в вашем действии Detail_toko на каждой следующей / предыдущей кнопке увеличьте позицию массива, чтобы получить данные, а затем заполните соответствующим образом.

Вот как вы передадите свой arraylist, передавая ArrayList через Intent

и вместо того, чтобы получать оставшиеся данные из намерения, получите данные от массива.

как arraylist.get (индекс).

именно так

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

/ ************************ Используйте метод, описанный здесь Как выполнить следующее действие кнопки?**************************** /

  //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);
Другие вопросы по тегам