簡體   English   中英

如何在FragmentList中實現onItemClick方法?

[英]How to implement onItemClick method in FragmentList?

我需要在一個標簽片段中使用listView,因此我從以下示例中實現了代碼: http : //geekswithblogs.net/bosuch/archive/2011/01/31/android---create-a-custom-multi-line-listview-綁定到一個.aspx 當MainActivity中的某些操作完成時,將顯示該列表,但我不知道如何單擊它。 我試過像本示例中所示,但是它不起作用,我認為問題是因為我有片段,該示例在MainActivity中。 請幫忙!

public class FragmentLogbook extends ListFragment {

        //handler for passing data through thread
        private Handler handler;
        //progress dialog
        private ProgressDialog progressDialog;

        private int progressBarStatus;

        SingletonLogbookPack mSingletonLogbookPack = SingletonLogbookPack.getInstance();
        ArrayList<SearchResults> searchResults = GetSearchResults();

        MyCustomBaseAdapter mAdapter;

        // Create an empty adapter we will use to display the loaded data.
        //CustomArrayAdapter mAdapter = new CustomArrayAdapter(getActivity());


        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState); 

            handler = new Handler(); 
            startDownloadingLogbooks();

        } 

        private void startDownloadingLogbooks() {   
            progressDialog = new ProgressDialog(getActivity());
            //progressDialog = ProgressDialog.show(getActivity(),"Loading Logbooks", "Please wait...");
            progressDialog.setCancelable(false);
            progressDialog.setMessage("Loading Logbooks ...");
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.setProgress(0);
            progressDialog.setMax(100);
            progressDialog.show();

            //reset progress bar status
            progressBarStatus = 0;

            // start the time consuming task in a new thread
            Thread thread = new Thread() {
                public void run () {
                    boolean p = ((MainActivity)getActivity()).mGpsColibri.mBinary.getLogbook();
                    while ( ((MainActivity)getActivity()).logbookFinished != true ) {
                        progressBarStatus = (int) ((MainActivity)getActivity()).GetProgressValue();
                        progressDialog.setProgress(progressBarStatus);
                        //in this time Progress dialog will be on screen                    
                    }
                    //set logbookFinished variable from MainActivity to false
                    ((MainActivity)getActivity()).logbookFinished = false;
                    // this will handle the post task.
                    // it will run when the time consuming task get finished
                    handler.post(new Runnable() {
                        @Override
                        public void run() {                     
                            // Update your UI or
                            // do any Post job after the time consuming task
                            // remember to dismiss the progress dialog here.
                            updateUI();
                            progressDialog.dismiss(); 
                        }
                    });
                }
            };

            thread.start();
        }

        private void updateUI() {
            mAdapter = new MyCustomBaseAdapter(getActivity(), searchResults);
            setListAdapter(mAdapter);
            ListView listview = FragmentLogbook.this.getListView();

            // set onItemClick here
        listview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> adapterview, View view, int pos,
            long id) {
        // do your work here...
        Toast.makeText(getActivity(), "" + pos, Toast.LENGTH_SHORT).show();
        }       
    });
        }

        private ArrayList<SearchResults> GetSearchResults(){
            ArrayList<SearchResults> results = new ArrayList<SearchResults>();

            SearchResults sr1 = new SearchResults();
            sr1.setName("John Smith");
            sr1.setCityState("Dallas, TX");
            sr1.setPhone("214-555-1234");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Jane Doe");
            sr1.setCityState("Atlanta, GA");
            sr1.setPhone("469-555-2587");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Steve Young");
            sr1.setCityState("Miami, FL");
            sr1.setPhone("305-555-7895");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Fred Jones");
            sr1.setCityState("Las Vegas, NV");
            sr1.setPhone("612-555-1234");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Bob Marsh");
            sr1.setCityState("New York, NY");
            sr1.setPhone("612-555-5678");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Harold Funk");
            sr1.setCityState("Chicago, IL");
            sr1.setPhone("612-555-8765");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Scott Dorf");
            sr1.setCityState("Winslow, AZ");
            sr1.setPhone("612-555-5432");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Mike Hail");
            sr1.setCityState("Seattle, WA");
            sr1.setPhone("612-555-0961");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Scott Dorf");
            sr1.setCityState("Winslow, AZ");
            sr1.setPhone("612-555-5432");
            results.add(sr1);

            sr1 = new SearchResults();
            sr1.setName("Mike Hail");
            sr1.setCityState("Seattle, WA");
            sr1.setPhone("612-555-0961");
            results.add(sr1);

            return results;
        }
    }

設置listview適配器后嘗試此操作

getListView().setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        // TODO Auto-generated method stub

    }
});

您可以在updateUI()內部為ListFragment行添加onItemClick偵聽器:

private void updateUI() {

 mAdapter = new MyCustomBaseAdapter(getActivity(), searchResults);
 setListAdapter(mAdapter);
 ListView listview = FragmentLogbook.this.getListView(); //<< initialize ListView

 // set onItemClick here
  listview.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> adapterview, View view, int pos,
            long id) {

        // do your work here...
    }
  });
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {        
    super.onListItemClick(l, v, position, id);
    /// do your code here
}
listview.setOnItemClickListener(new OnItemClickListener() {
  @Override
public void onItemClick(AdapterView<?> arg0,View arg1, int arg2, long arg3) {

String requiredvalue= ((TextView) arg1.findViewById(R.id.viewid)).getText().toString();
Log.i("requiredvalue", requiredvalue);

}

要么

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);

    searchResults.get(position);
    Log.i("requiredvalue", ""+searchResults.get(position));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM