2016-11-13 9 views
-1

У меня есть вид списка, который завышен от моего адаптера. Когда я нажимаю на одну из кнопок, я получаю неправильный элемент. Используется для работы o.k, пока я не добавил кнопку whatsApp.list view щелчок получает неправильный элемент

Это мой адаптер:

public class shawarmaddapter extends ArrayAdapter<shawarma> { 
String nname; 
double lat,lon; 

public shawarmaddapter(Context context, List<shawarma> resource) { 
    super(context,0, resource); 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    .... 

    if (convertView==null) 
    { 
     convertView= LayoutInflater.from(getContext()).inflate(R.layout.shawarmaddapter,parent,false); 
    } 
    .... 
    waze= (ImageButton)convertView.findViewById(R.id.adapterWazeBTN); 
    whats = (ImageButton)convertView.findViewById(R.id.whats); 
    locName=name.getText().toString(); 


.... 
    nname = sh1.getName(); 
    name.setText(sh1.getName()); 
.... 

    if (sh1.getParking()==1) 
     park.setChecked(true); 
    else 
     park.setChecked(false); 

    rate.setRating((float) sh1.getRank()); 
    rate.setIsIndicator(true); 
    listener lis = new listener(); 
    waze.setOnClickListener(lis); 
    whats.setOnClickListener(lis); 
    lat= sh1.getLat(); 
    lon= sh1.getLon(); 

    return convertView; 
} 

есть onClickListener добавил в код Thats должен проверить место, если кнопка Waze нажата или имя, если кнопка нажата WhatsApp. Это код

class listener implements View.OnClickListener{ 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) 
     { 
      case R.id.adapterWazeBTN: 
       Log.i("a7", "button clicked"); 

       // Log.i("a7", lat+" lat, "+lon+" lon"+ "distance: "+ sh1.getDistance()); 

       try 
       { 
        String url = "waze://?ll="+lat+","+lon+"&navigate=yes"; 
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
        shawarmaList.con. startActivity(intent); 
       } 
       catch (ActivityNotFoundException ex ) 
       { 
        Intent intent = 
          new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.waze")); 
        shawarmaList.con.startActivity(intent); 
       } 
       catch (Exception ex) 
       { 
        Log.i("a7",ex.toString()); 
       } 


       break; 
      case R.id.whats: 
       Intent sendIntent = new Intent(); 
       sendIntent.setAction(Intent.ACTION_SEND); 
       sendIntent.putExtra(Intent.EXTRA_TEXT, "do you want to Join me to "+nname+"?"); 
       sendIntent.setType("text/plain"); 

       try { 
        Toast.makeText(shawarmaList.con.getApplicationContext(),nname,Toast.LENGTH_SHORT).show(); 
        shawarmaList.con.startActivity(sendIntent); 
       } catch (Exception e) { 
        Log.i("a7",e.getMessage()); 
       } 

       break; 


     } 
    } 
} 

Как я могу изменить это, чтобы получить правильный пункт?

+0

Вы не посылаете индекс вашего пункта для вашего слушателя. Как слушатель может узнать, какой индекс вы нажали? Также вам необходимо использовать шаблон ViewHolder на вашем адаптере для повышения производительности и других неполадок. –

+0

как я могу отправить индекс? Как это работает, прежде чем я добавил кнопку whatsapp? Вы можете помочь с владельцем? –

+0

Вам нужно научиться исследовать. Проверьте эти ссылки: https://developer.android.com/training/improving-layouts/smooth-scrolling.html и http://stackoverflow.com/questions/20541821/get-listview-item-position-on-button- нажмите –

ответ

0

Вы можете попробовать этот способ

package com.example.listview; 

import java.util.ArrayList; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.ClipData.Item; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    ListView list; 
    ArrayList<String> data; 
    ArrayAdapter<String> adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     list=(ListView)findViewById(R.id.listView1); 
     data=new ArrayList<String>(); 
     data.add("List item 1"); 
     data.add("List item 2"); 
     data.add("List item 3"); 
     data.add("List item 4"); 
     adapter=new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,data); 
     list.setAdapter(adapter); 

     list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 

      String s= Integer.toString(arg2) ; //here arg2 selects the list item 
      Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show(); 
      // TODO Auto-generated method stub 

     } 
    }); 
    } 




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 
0

Попробуйте это:

class listener implements View.OnClickListener{ 

    shawarma sh; 

    listener(shawarma sh1) { 
     sh = sh1; 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) 
     { 
      case R.id.adapterWazeBTN: 
       Log.i("a7", "button clicked"); 

       // Log.i("a7", sh.getLat()+" lat, "+sh.getLon()+" lon"+ "distance: "+ sh.getDistance()); 

       try 
       { 
        String url = "waze://?ll="+sh.getLat()+","+sh.getLon()+"&navigate=yes"; 
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
        shawarmaList.con. startActivity(intent); 
       } 
       catch (ActivityNotFoundException ex ) 
       { 
        Intent intent = 
          new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.waze")); 
        shawarmaList.con.startActivity(intent); 
       } 
       catch (Exception ex) 
       { 
        Log.i("a7",ex.toString()); 
       } 


       break; 
      case R.id.whats: 
       Intent sendIntent = new Intent(); 
       sendIntent.setAction(Intent.ACTION_SEND); 
       sendIntent.putExtra(Intent.EXTRA_TEXT, "do you want to Join me to "+sh.getName()+"?"); 
       sendIntent.setType("text/plain"); 

       try { 
        Toast.makeText(shawarmaList.con.getApplicationContext(),sh.getName(),Toast.LENGTH_SHORT).show(); 
        shawarmaList.con.startActivity(sendIntent); 
       } catch (Exception e) { 
        Log.i("a7",e.getMessage()); 
       } 

       break; 


     } 
    } 
} 

Тогда при создании слушателя просто передать объект shwarma вроде этого:

listener lis = new listener(sh1); 
+0

Я попробовал, но он по-прежнему выбирает неправильный товар –

0

Вместо того,

waze.setOnClickListener(lis); 
whats.setOnClickListener(lis); 

попробовать это,

waze.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     try { 
      String url = "waze://?ll="+sh1.getLat()+","+sh1.getLon()+"&navigate=yes"; 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      shawarmaList.con. startActivity(intent); 
     } catch (ActivityNotFoundException ex ) { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.waze")); 
      shawarmaList.con.startActivity(intent); 
     } catch (Exception ex) { 
      Log.i("a7",ex.toString()); 
     } 
    } 
}); 

whats.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     try { 
      Intent sendIntent = new Intent(); 
      sendIntent.setAction(Intent.ACTION_SEND); 
      sendIntent.putExtra(Intent.EXTRA_TEXT, "do you want to Join me to "+sh1.getName()+"?"); 
      sendIntent.setType("text/plain"); 

      Toast.makeText(shawarmaList.con.getApplicationContext(),sh1.getName(),Toast.LENGTH_SHORT).show(); 
      shawarmaList.con.startActivity(sendIntent); 
     } catch (Exception e) { 
      Log.i("a7",e.getMessage()); 
     } 
    } 
}); 

Вы хотите сделать sh1 как окончательный,

final shawarma sh1 = getItem(position); 

 Смежные вопросы

  • Нет связанных вопросов^_^