-1

私はアンドロイドアプリケーションで作業しています。その中で、最初に webservice からのすべてのデータを保存し、後で db からデータをクエリして listview で更新する必要があります。

私のリストビュー項目には、チェックボックスとボタンが含まれています。ボタンまたはチェックボックスをクリックすると、正常に動作します(ログが表示されます)が、リストビューでボタンをクリックすると子アクティビティを開始する必要があります。

これは私のアダプタークラスです。

public class GuestListAdapter extends BaseAdapter{
    Context context;
    ArrayList<String > arrayListFirstValue;
    ArrayList<String > arrayListSecondValue;
    ArrayList<String > arrayListThirdValue;
    public GuestListAdapter(Context mcontext, ArrayList<String> arrListFV,ArrayList<String> arrListSV,ArrayList<String> arrListGuestTV)
    {
        arrayListFirstValue =arrListFV;
        arrayListSecondValue =arrLisSV;
        arrayListThirdValue =arrListTV;
        context = mcontext;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return arrayListFirstValue.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return arrayListFirstValue.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        // TODO Auto-generated method stub
         if (view == null) {
                LayoutInflater inflater = LayoutInflater.from(parent.getContext());
                view = inflater.inflate(R.layout.guest_list_item, parent, false);
            }



         TextView txtFirstValue = (TextView)view.findViewById(R.id.txt_firstname);
            txtFirstValue .setText(arrayListFirstValue.get(position));
         TextView txtSecondValue = (TextView)view.findViewById(R.id.txt_lastname);
         txtSecondValue .setText(arrayListSecondValue.get(position));
         TextView txtThirdValue = (TextView)view.findViewById(R.id.txt_guest_count);
         txtThirdValue .setText(arrayListThirdValue.get(position));
         Button btnInfo = (Button)view.findViewById(R.id.btn_info);

         CheckBox checkBoxCheckins = (CheckBox)view.findViewById(R.id.checkBoxIsCheckedIn);


         btnInfo.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                 System.out.println("Adap button **********");

            }
        });
         checkBoxCheckins.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                 System.out.println("Adap checked **********");

            }
        });

        return view;
    }


}

最後に私の質問は、リストビューでボタンをクリックしたときに子アクティビティを開始する必要があるということです。これを達成する方法を教えてください。

4

2 に答える 2

0

とても簡単です。現在のリスナーを次のように変更するだけです。

編集:最初はタブの子アクティビティでそのリストビューを伝えていないためです。

    btnInfo.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                     Intent intent = new Intent(context, YourNewTabActivity.class);// Your tab parent activity.
intent.putExtra(Constants.TAB_INDEX, tab index number) // pass the index of the tab you want to move to.

    startActivity(intent);

                }
            });

タブアクティビティ(親アクティビティ)で、目的のタブのインデックスを格納する変数を作成します

private int tabindex = 0;

これをチェックインonCreate

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);



            setContentView(R.layout.main_tab_screen);
            tabHost = (TabHost) findViewById(android.R.id.tabhost);
            tabWidget = getTabWidget();


            if (getIntent().getExtras() != null) {
                tabindex = getIntent().getExtras().getInt(Constants.TAB_INDEX,
                        0); // you check if this parent started from other activity. You child activity will pass the desire tab index here. If nothing is special, just display the  1st tab.
                            }
            initTab();
        } 
    }



    protected void initTab() {
        Intent intent;
        TabHost.TabSpec spec;
        // Add tab child
        spec = tabHost.newTabSpec("Inbox").setIndicator(
                getTabIndicatorView(MainTabActivity.this, "Hộp thư",
                        R.drawable.tin_nhan_tab_selector));
        intent = new Intent(this, com.vtcmobile.ui.InboxActivity.class);
        // intent.putExtra(Constants.INTENT_IS_LOAD, isload);
        spec.setContent(intent);
        tabHost.addTab(spec);
....

        tabHost.setCurrentTab(tabindex); // use the tab index to get the right tab you want.
        tabHost.getTabWidget().focusCurrentTab(tabindex);

    }
于 2012-11-22T09:05:35.160 に答える
0

次のようにアダプターに渡されたアクティビティのコンテキストを使用して、新しいアクティビティを開始する必要があります。

Intent intent = new Intent(context,Activity.class);
startActivity(intent);
于 2012-11-22T08:46:58.280 に答える