0

私はAndroidの初心者で、リストビューにarrayilstとカスタムアダプターを設定しています。リストビューを設定するアイテムに基づいてコマンドを実行するように、リストビューの onClickListener をセットアップします。リストビューには、arraylist の項目が動的に取り込まれます。position と id パラメータを試してみましたが、うまくいきませんでした。どんな助けでも大歓迎です。

listview、arraylist、およびアダプターをインスタンス化する方法

    portfoliolist = (ListView) findViewById(R.id.listViewPortfolios);
    users = new ArrayList<PortfolioRecord>();
    portfoliolist.setAdapter(new UserItemAdapter(this, R.layout.simplerow, users));
    portfoliolist.setOnItemClickListener(this);     

私のカスタムアダプター。

public class UserItemAdapter extends ArrayAdapter<PortfolioRecord> {
    private ArrayList<PortfolioRecord> users;

    public UserItemAdapter(Context context, int textViewResourceId, ArrayList<PortfolioRecord> users) {
        super(context, textViewResourceId, users);
        this.users = users;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.simplerow, null);
        }

        PortfolioRecord user = users.get(position);         
        if (user != null) {
            TextView portfolioname = (TextView) v.findViewById(R.id.portfolioname);
            TextView currentvalue = (TextView) v.findViewById(R.id.currentvalue);

            if (portfolioname != null) {
                portfolioname.setText(user.portfolioname);
            }

            if(currentvalue != null) {
                currentvalue.setText("Current Value: " + user.currentvalue );
            }
        }
        return v;
    }
}

public class PortfolioRecord {
    public String portfolioname;
    public String currentvalue;

    public PortfolioRecord(String portfolioname, String currentvalue) {
        this.portfolioname = portfolioname;
        this.currentvalue = currentvalue;       
    }
}

arraylist に項目を追加する方法:

            user1 = new PortfolioRecord(pn10, denomination10+portfoliovalue10);        
        users.add(user1);

アレイリストに Usernull、user1、および user2 を追加しました。これらのアイテムを特定するにはどうすればよいですか? 私は運がない次のコードを試しました

public void onItemClick(AdapterView parent, View itemClicked, int position,
        long id) {
     TODO Auto-generated method stub
    switch(parent.getId()){
    case R.id.listViewPortfolios:
        if(portfoliolist.getSelectedItem()==usernull){
            openCustomDialog();
        }else if(portfoliolist.getSelectedItem()==user1){
            whichportfolio=1;               
        }else if(portfoliolist.getSelectedItem()==user2){
            whichportfolio=2;               
        }
     break;}}
4

3 に答える 3

1

あなたのポートフォリオレコードオブジェクトに以下があると仮定します: getTypeofUser()

portfoliolist.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
        String typeofUser =users.get(position).getTypeofUser();
                if(typeofUser == user1 ){
                    whichportfolio=1; 
                 }
    }
    });
于 2012-09-04T22:58:54.623 に答える
1

OnItemSelectedListener を実装する必要はありません。これを既存の OnItemClick メソッド内で使用するだけです。

public void onItemClick(AdapterView parent, View itemClicked, int position,
        long id) {
    // TODO Auto-generated method stub
     PortfolioRecord user = users.get(position);

        // I'm not certain what this code block does...
        if(user.equals(usernull)){
             openCustomDialog();
        }else if(user.equals(user1)){
            whichportfolio=1;              
        }else if(user.equals(user2)){
            whichportfolio=2;             
        }}
于 2012-09-05T02:14:16.180 に答える
0

OnItemSelectedListener に変更することをお勧めします。そうすれば、次のように PortfolioRecord を簡単に取得できます。

listView.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView parent, View view, int position, long id) {
        // Get the user (PortfolioRecord) that was selected
        PortfolioRecord user = users.get(position);

        // I'm not certain what this code block does...
        if(user.equals(usernull)){
             openCustomDialog();
        }else if(user.equals(user1)){
            whichportfolio=1;               
        }else if(user.equals(user2)){
            whichportfolio=2;               
        }
    }
});
于 2012-09-04T21:20:47.767 に答える