2011-12-14 8 views
0

連絡先リストビューの作成、ユーザー名の表示、ユーザーの電子メールとユーザーIDの作成です。今、特定のアイテムをクリックしながら、私はユーザーIDに基づいてサーバーにいくつかのイベントを投稿したい。ユーザーIDがlong値であるため、onClickItemリスナー内でユーザーIDを取得する方法私はテキストを意味するユーザー名を取得できますが、ユーザーIDは取得できません。onClickItem listnerのカスタマイズ - ListActivity

+0

だあなたはここであなたのArrayAdapterの作成に関連するコードを置くことができますか? – havexz

答えて

1

ListViewコントロールはonCLicklistenerを持っているあなたは、あなたがこれを使用することができますリストビューを膨らませるためのArrayListを使用しているposition.Ifパラメータを持っています対応するオブジェクトを取得するためのポジション。

0

View.setTagView.getTagを使用して、ユーザーIDをタグに設定できます。あなたは必要なものを選ぶことができる2つのバージョンがあります。これにより、ユーザーIDをタグとして添付して戻すことができます。

http://developer.android.com/reference/android/view/View.html#setTag(int、java.lang.Object)メソッド

あなたのコードは次のようになります。

view.setTag(Long.valueOf(id)); 


..... 
onClickListener(..) { 
    Long id = (Long)view.getTag(); 
} 
+0

thnx、うまくいきます:) –

+0

getView()でsetTagを何度も使用できますか?スクロールしている間にクラッシュしています。何をしたらいいですか? –

+0

アダプタを使用していますか?そうでなければ、キー/値のペアであるsetTagの他のバージョンを見ることができます。 – havexz

0

あなたのユーザーIDが含まれている独自のBeanクラスを作成し、リスト(またはArrayListに)

はその後、ArrayAdapterを拡張するクラスを作成することにより、アダプタを作成してそれを置く必要があります(たとえば)このBeanクラスのリストをバインドします

カスタムレイアウトを拡張する場合は、行内のonItemClickListenerまたはView listenerを使用してリスナーを登録します。

位置を取得し、それを使用してBeanリストのユーザーIDを取得します。

ここに私のスニペットは

public class ListActivity extends Activity implements OnItemClickListener { 
private Context context; 
private RowAdapter adapter; 
private ArrayList<Row> rowList = new ArrayList<Row>(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    context = ListActivity.this; 

    initRows(); 

    adapter = new RowAdapter(context, rowList); 

    ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(this); 
} 

private void initRows() { 
    Row row = new Row(1); 
    rowList.add(row); 

    row = new Row(2); 
    rowList.add(row); 
} 

public class Row { 
    long userid = 0; 

    public Row(long userid) { 
     this.userid = userid; 
    } 

    public long getUserid() { 
     return userid; 
    } 

    public void setUserid(long userid) { 
     this.userid = userid; 
    } 
} 

public class RowAdapter extends ArrayAdapter<Row> { 

    private Context context; 

    public RowAdapter(Context context, ArrayList<Row> bindList) { 
     super(context, R.layout.row_layout, bindList); 
     this.context = context; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 

     if(view == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.row_layout, null); 
     } 

     //if you use some additional View you can retrieve your position using this 
     Button button = view.findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() {     
      @Override 
      public void onClick(View v) { 
       updateSelected(position); 
      } 
     }); 

     return view; 
    } 

} 

//or if you rather just listen on row click then you can retrieve your position using this 
@Override 
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) { 
    updateSelected(position); 
} 

private void updateSelected(int position) { 
    rowList.get(position).getUserid(); 
    //have it your way 
} 

}