0

リストビューを実装しました。

リスト ビューの各項目には、TextView と Button の 2 つの要素があります。

リストビューをクリック可能にするために、ArrayList アダプターを実装しました。

現在、リストビュー内の任意の要素をクリックするたびに OnItemClickListener が呼び出されるということが起こっています。

今私がやりたいことは、要素全体ではなく、ボタンをクリックできるようにすることです。

これが私が実装したコードです。

public class SurveyListActivity extends ListActivity {


static private ArrayList<Survey> EU=new ArrayList<Survey>();

static {

        EU.add(new Survey(R.string.Survey1, R.drawable.completed,R.string.Survey1));
        EU.add(new Survey(R.string.Survey2, R.drawable.completed,R.string.Survey2));
        EU.add(new Survey(R.string.Survey3, R.drawable.inprogress,R.string.Survey3));
        EU.add(new Survey(R.string.Survey4, R.drawable.inprogress,R.string.Survey4));
        EU.add(new Survey(R.string.Survey5,R.drawable.inprogress,R.string.Survey5));
        EU.add(new Survey(R.string.Survey6, R.drawable.start,R.string.Survey6));

}

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

@Override
protected void onListItemClick(ListView l, View v,int position, long id) 
{

    Toast.makeText(SurveyListActivity.this, "You Selected :- " + EU.get(position).name, Toast.LENGTH_LONG).show();

}

static class Survey 
{
    int name;
    int status;
    int result;

    Survey(int name, int status, int result) 
    {
        this.name=name;
        this.status=status;
        this.result=result;
    }
}

class SurveyAdapter extends ArrayAdapter<Survey> 
{
    SurveyAdapter() 
    {

        super(SurveyListActivity.this, R.layout.row, R.id.name, EU);
    }


    @Override
    public View getView(int position, View convertView,
    ViewGroup parent) 
    {
        SurveyWrapper wrapper=null;

        if (convertView==null) 
        {
            convertView=getLayoutInflater().inflate(R.layout.row, null);
            wrapper=new SurveyWrapper(convertView);
            convertView.setTag(wrapper);
        }
        else 
        {
            wrapper=(SurveyWrapper)convertView.getTag();
        }

        wrapper.populateFrom(getItem(position),position);
        return(convertView);
    }
}

class SurveyWrapper 
{
    private TextView name=null;
    private ImageView status=null;
    private View row=null;

    SurveyWrapper(View row) 
    {
        this.row=row;
    }

    TextView getName() 
    {
        if (name==null) 
        {
            name=(TextView)row.findViewById(R.id.name);
        }
        return(name);
    }

    ImageView getstatus() 
    {
        if (status==null) 
        {
            status=(ImageView)row.findViewById(R.id.flag);
        }
        return(status);
    }

    void populateFrom(Survey survey, int i) 
    {
        if((i%2)!=0)
        {

            row.setBackgroundColor(Color.LTGRAY);
            getName().setBackgroundColor(Color.LTGRAY);
        }
        getName().setText(survey.name);
        getstatus().setImageResource(survey.status);

    }
}

}
4

3 に答える 3

0

onListItemClickまさにそれを行います:アイテムの任意の場所をクリックすることに応答します。アイテムのビューの一部のみをクリック可能にしたい場合はgetView、アダプターのでこれを行います。

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    SurveyWrapper wrapper=null;

    if (convertView==null) 
    {
        convertView=getLayoutInflater().inflate(R.layout.row, null);
        wrapper=new SurveyWrapper(convertView);
        convertView.setTag(wrapper);
    }
    else 
    {
        wrapper=(SurveyWrapper)convertView.getTag();
    }

    wrapper.populateFrom(getItem(position),position);
    convertView.findViewById(R.id.my_button).setOnClickListener(new onClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(SurveyListActivity.this, "You Selected :- " + EU.get(position).name, Toast.LENGTH_LONG).show();
        }
    });
    return(convertView);
}

そして、完全に削除しonItemClickListenerます。

于 2012-06-21T12:45:21.440 に答える
0

カスタムアダプタを使用してから、setOnClickListenerを特定のアイテム(ボタン)に追加します

Button btnAction= (Button)v.findViewById(R.id.btnAction);

btnAction.setOnClickListener(new View.OnClickListener() {

                      @Override
                      public void onClick(View view) {
                            Toast toast = Toast.makeText(mContext.getApplicationContext(), "Click", Toast.LENGTH_SHORT);
                            toast.show(); 
                      }
                    });
于 2012-06-21T14:11:55.337 に答える
0

私があなたを正しく理解していれば、onItemClickedListener を削除し、onClick リスナーをボタンにアタッチする必要があります。行レイアウト xml で一般的なボタン クリック リスナーを設定し、ビュー オブジェクトの親 (ListView である必要があります) を介してどのボタンがクリックされたかを判断できる必要があります。

于 2012-06-21T12:41:40.187 に答える