私は新しいプログラマーであり、Androidの初心者です。私はこの例を使用しています http://www.androidhive.info/2012/09/Android-adding-search-functionality-to-listview/ それはうまく機能します。
次に、それぞれ異なる情報を持つ新しいアクティビティを開くための関数を呼び出すアイテム(Dell、Samsung Galaxy S3など)を作成します。
例えば:
デルをタッチすると、新しいアクティビティが表示され、デルに関する情報が表示されます。サムスンに触れると、同じことです。
Googleで検索しましたが、役立つ情報が見つかりませんでした。ヒントはありませんか?これは基本的なことだと思いますが、私は新しいのでどこから始めればいいのかわかりません
リストビューを定義したアクティビティで
あなたが書く
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);
}
あなたは意図を持って新しい活動を始めます。データをインテントに送信する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
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 。
あなたのonitemClick
でdeal
のような選択した値を送信し、新しいアクティビティを開くときにインテントで送信し、新しいアクティビティで送信データを取得し、選択したアイテムに関連するデータを表示します
list
から名前を取得するには
String item = yourData.get(position).getName();
データを意図的に設定する
intent.putExtra("Key", item);
2番目のアクティビティでデータを取得する
getIntent().getExtras().getString("Key")
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);
}
});
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の実行方法を示しています。もっと時間があれば、詳細な説明を追加します
私のコメント:
コンテキスト参照をthis
またはContext.this
からgetapplicationcontext
に置き換えることで、全体を回ることができました。
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);
}
});
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);
}
});