web-dev-qa-db-ja.com

Android onClickアイテムを含むListView

私は新しいプログラマーであり、Androidの初心者です。私はこの例を使用しています http://www.androidhive.info/2012/09/Android-adding-search-functionality-to-listview/ それはうまく機能します。

次に、それぞれ異なる情報を持つ新しいアクティビティを開くための関数を呼び出すアイテム(Dell、Samsung Galaxy S3など)を作成します。

例えば:

デルをタッチすると、新しいアクティビティが表示され、デルに関する情報が表示されます。サムスンに触れると、同じことです。

Googleで検索しましたが、役立つ情報が見つかりませんでした。ヒントはありませんか?これは基本的なことだと思いますが、私は新しいのでどこから始めればいいのかわかりません

31
Agustín

リストビューを定義したアクティビティで

あなたが書く

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);
}
64
Lena Bru

あなたは意図を持って新しい活動を始めます。データをインテントに送信する1つの方法は、インテントにparcelableを実装するクラスを渡すことです。クラスのコピーを渡すことに注意してください。

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

ここにonItemClickがあります。インテントを作成し、クラス全体をインテントに入れます。送信するクラスは、parcelableを実装しています。ヒント:クラスを再作成するために最低限必要なものの上に解析可能なものを実装するだけで済みます。つまり、ファイル名か、コンストラクタがクラスを作成するために使用できる文字列のような単純なものかもしれません。新しいアクティビティは後でgetExtrasを取得でき、基本的にはコンストラクタメソッドでクラスのコピーを作成しています。

ここで、リストビューでonclickを受信したときに my app のkmlreaderクラスを起動します。

注:以下の概要は、私が渡すクラスのリストですので、get(position)はリストビューに移入するのと同じリストであるクラスの事実を返します

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

幸運のダニー117

5
danny117

ArrayListAdapterを確実に拡張し、getView()メソッドでこれを実装する必要があります。 2番目のパラメーター(View)の値がnullである場合は、膨らませて、それを利用し、膨らませた直後にonClickListener()に設定します。

2番目の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の拡張方法に関する情報が必要な場合は、これをお勧めします link

4
nKn

あなたのonitemClickdealのような選択した値を送信し、新しいアクティビティを開くときにインテントで送信し、新しいアクティビティで送信データを取得し、選択したアイテムに関連するデータを表示します

listから名前を取得するには

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

データを意図的に設定する

intent.putExtra("Key", item);

2番目のアクティビティでデータを取得する

getIntent().getExtras().getString("Key")
4
mohammed momn
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);
    }
});
4
Munna Sharma

Parcelableを実装する地獄の種類は?

彼はアダプタ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を返す場合、たとえば次のようにリスナーを設定します。

 @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の実行方法を示しています。もっと時間があれば、詳細な説明を追加します

私のコメント:

  • スイッチステートメントは使用しないでください
  • 製品ごとに個別のアクティビティを作成しないでください(1つのみ必要)
0
ceph3us

コンテキスト参照をthisまたはContext.thisからgetapplicationcontextに置き換えることで、全体を回ることができました。

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

});
0
Pascal Chidi
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);
  }

});
0
Arjun Atlast