Получение следующих и предыдущих подробных данных из списка
Я не знаю, как сделать функцию для отображения следующих / предыдущих подробных данных, нажав кнопку "следующий / предыдущий" на основе списка.
Это скриншот, который я хочу сделать
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);