Подтвердить что ты не робот

Android ListView с элементами onClick

Я новый программист и новичок в Android. Я использую этот пример http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/, и он отлично работает.

Теперь я хочу, чтобы элементы (Dell, Samsung Galaxy S3 и т.д.) вызывали функцию для открытия нового действия с различной информацией.

Например:

Если я коснусь Dell, новое мероприятие должно показать мне информацию о Dell. Если я коснусь Samsung, то же самое.

I Googled, но не нашел ничего полезного, никакого намека? Я думаю, что это принципиально, но я новичок, поэтому я не знаю, с чего начать

4b9b3361

Ответ 1

В вашей деятельности, где вы определили свой список

вы пишете

listview.setOnItemClickListener(new OnItemClickListener(){   
    @Override
    public void onItemClick(AdapterView<?>adapter,View v, int position){
        ItemClicked item = adapter.getItemAtPosition(position);

        Intent intent = new Intent(Activity.this,destinationActivity.class);
        //based on item add info to intent
        startActivity(intent);
    }
});

в вашем адаптере getItem вы пишете

public ItemClicked getItem(int position){
    return items.get(position);
}

Ответ 2

Вы начинаете новые действия с намерениями. Один из методов отправки данных в намерение - это передать класс, который реализуется в намерении. Обратите внимание, что вы передаете копию класса.

http://developer.android.com/reference/android/os/Parcelable.html

Здесь у меня есть onItemClick. Я создаю умысел и putExtra целый класс в намерении. Класс, который я отправляю, реализован. Совет. Вам нужно всего лишь реализовать синтаксический анализ над тем, что минимально необходимо для воссоздания класса. Т.е. возможно, имя файла или что-то простое, как строка, что конструктор может использовать для создания класса. Новая активность может позже getExtras и по существу создает копию класса с его конструкторским методом.

Здесь я запускаю класс kmlreader мое приложение, когда получаю onclick в списке.

Примечание: ниже summary - это список класса, который я передаю, поэтому get (position) возвращает значение infact класса, это тот же список, который заполняет listview

List<KmlSummary> summary = null;
...

public final static String EXTRA_KMLSUMMARY = "com.gosylvester.bestrides.util.KmlSummary";

...

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    lastshownitem = position;
    Intent intent = new Intent(context, KmlReader.class);
    intent.putExtra(ImageTextListViewActivity.EXTRA_KMLSUMMARY,
            summary.get(position));
    startActivity(intent);
}

позже в новом действии я вытаскиваю класс синтаксического анализа с помощью

kmlSummary = intent.getExtras().getParcelable(
                ImageTextListViewActivity.EXTRA_KMLSUMMARY);

//note:
//KmlSummary implements parcelable.
//there is a constructor method for parcel in
// and a overridden writetoparcel method
// these are really easy to setup.

public KmlSummary(Parcel in) {
    this._id = in.readInt();
    this._description = in.readString();
    this._name = in.readString();
    this.set_bounds(in.readDouble(), in.readDouble(), in.readDouble(),
    in.readDouble());
    this._resrawid = in.readInt();
    this._resdrawableid = in.readInt();
     this._pathstring = in.readString();
    String s = in.readString();
    this.set_isThumbCreated(Boolean.parseBoolean(s));
}

@Override
public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeInt(this._id);
    arg0.writeString(this._description);
    arg0.writeString(this._name);
    arg0.writeDouble(this.get_bounds().southwest.latitude);
    arg0.writeDouble(this.get_bounds().southwest.longitude);
    arg0.writeDouble(this.get_bounds().northeast.latitude);
    arg0.writeDouble(this.get_bounds().northeast.longitude);
    arg0.writeInt(this._resrawid);
    arg0.writeInt(this._resdrawableid);
    arg0.writeString(this.get_pathstring());
    String s = Boolean.toString(this.isThumbCreated());
    arg0.writeString(s);
}

Удачи Danny117

Ответ 3

Вы должны обязательно расширить ArrayListAdapter и реализовать это в своем методе getView(). Второй параметр (a View) должен быть завышен, если его значение равно null, воспользуйтесь им и установите его onClickListener() сразу после раздувания.

Предполагая, что ваш второй параметр getView() называется convertView:

convertView.setOnClickListener(new View.OnClickListener() {
  public void onClick(final View v) {
    if (isSamsung) {
      final Intent intent = new Intent(this, SamsungInfo.class);
      startActivity(intent);
    }
    else if (...) {
      ...
    }
  }
}

Если вам нужна информация о расширении ArrayListAdapter, я рекомендую эту ссылку .

Ответ 4

в вашем onitemClick вы отправите выбранное значение, например deal, и отправьте его в своем намерении при открытии нового действия и в своем новом действии получите отправленные данные и связанные с выбранным элементом ваши данные

чтобы получить имя из list

String item = yourData.get(position).getName(); 

чтобы установить данные в намерении

intent.putExtra("Key", item);

чтобы получить данные во второй активности

getIntent().getExtras().getString("Key")

Ответ 5

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        Intent i = new Intent(getActivity(), DiscussAddValu.class);
        startActivity(i);
    }
});

Ответ 6

listview.setOnItemClickListener(new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?>adapter,View v, int position){
    Intent intent;
    switch(position){
      case 0:
        intent = new Intent(Activity.this,firstActivity.class);
        break;
      case 1:
        intent = new Intent(Activity.this,secondActivity.class);
        break;
     case 2:
        intent = new Intent(Activity.this,thirdActivity.class);
        break;
    //add more if you have more items in listview
   //0 is the first item 1 second and so on...
    }
    startActivity(intent);
  }

});

Ответ 7

для какого ад реализует Parcelable?

он переходит к адаптеру String [], поэтому

  • получить элемент (String) в позиции
  • создать намерение
  • добавьте его как дополнительную
  • начать деятельность
  • в действии получить дополнительные

чтобы сохранить список продуктов, которые вы можете использовать здесь. HashMap (например, как объект STATIC)

примерный класс, описывающий продукт:

public class Product {
    private String _name;
    private String _description;
    private int _id

    public Product(String name, String description,int id) {
        _name = name;
        _desctription = description;
        _id = id;
    }

    public String getName() {
        return _name;
    }

    public String getDescription() {
        return _description;
    }
}

Product dell = new Product("dell","this is dell",1);

HashMap<String,Product> _hashMap = new HashMap<>();
_hashMap.put(dell.getName(),dell);

затем перейдите к набору ключей адаптера как:

String[] productNames =  _hashMap.keySet().toArray(new String[_hashMap.size()]);

когда в интерфейсе u вернется просмотр u set listener, например:

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {

     Context context = parent.getContext(); 

     String itemName = getItem(position)

     someView.setOnClikListener(new MyOnClickListener(context, itemName));

 }


 private class MyOnClickListener implements View.OnClickListener { 

     private  String _itemName; 
     private  Context _context

     public MyOnClickListener(Context context, String itemName) {
         _context = context;
         _itemName = itemName; 
     }

     @Override 
     public void onClick(View view) {
         //------listener onClick example method body ------
         Intent intent = new Intent(_context, SomeClassToHandleData.class);
         intent.putExtra(key_to_product_name,_itemName);
         _context.startActivity(intent);
     }
 }

то в другой деятельности:

@Override 
public void onCreate(Bundle) {

    String productName = getIntent().getExtra(key_to_product_name);
    Product product = _hashMap.get(productName);

}

* key_to_product_name является общедоступной статической строкой, которая служит ключом для дополнительных

пс. извините за опечатку, я спешил:) ps2. это поможет вам понять, как это сделать ps3. когда у меня будет больше времени, я добавлю подробное описание

МОЙ КОММЕНТАРИЙ:

  • НЕ ИСПОЛЬЗУЙТЕ ЛЮБЫЕ ЗАЯВЛЕНИЯ SWITCH
  • НЕ СОЗДАТЬ ОТДЕЛЬНЫЕ МЕРОПРИЯТИЯ ДЛЯ КАЖДОГО ПРОДУКТА (ТО НУЖНО ТОЛЬКО ОДИН)

Ответ 8

Мне удалось обойти все это, заменив ссылку на контекст от this или Context.this на getapplicationcontext.

Ответ 9

listview.setOnItemClickListener(new OnItemClickListener(){

//setting onclick to items in the listview.

@Override
public void onItemClick(AdapterView<?>adapter,View v, int position){
Intent intent;
switch(position){

// case 0 is the first item in the listView.

  case 0:
    intent = new Intent(Activity.this,firstActivity.class);
    break;
//case 1 is the second item in the listView.

  case 1:
    intent = new Intent(Activity.this,secondActivity.class);
    break;
 case 2:
    intent = new Intent(Activity.this,thirdActivity.class);
    break;
//add more if you have more items in listView
startActivity(intent);
}

});

Ответ 10

**

Основная деятельность

**

**

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ListView listView1 = (ListView) findViewById(R.id.listView1);
        
        Product[] items = { 
            new Product(1, "Milk", 21.50), 
            new Product(2, "Butter", 15.99), 
            new Product(3, "Yogurt", 14.90), 
            new Product(4, "Toothpaste", 7.99), 
            new Product(5, "Ice Cream", 10.00), 
        };
        
        ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
                    android.R.layout.simple_list_item_1, items);
        
        listView1.setAdapter(adapter);

        listView1.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                
                String item = ((TextView)view).getText().toString();
                
                Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
                
            }
        });

    }
}