如何在导航抽屉的片段中插入ListActivity

时间:2014-12-16 17:22:31

标签: android android-fragments listactivity

我正在开发Navigaion Drawer,我确实有ListActivity和Fragment Activity。我想在Fragment中看到ListActivity。但它在Fragment中插入ListActivity的代码时给出了错误。 我已经浏览过网络,但实际上没有得到任何有效的结果。

此处片段活动

public class FragmentOne extends Fragment {
    public boolean net;
    ImageView ivIcon;
    TextView tvItemName;

    public static final String IMAGE_RESOURCE_ID = "iconResourceID";
    public static final String ITEM_NAME = "itemName";

    public FragmentOne() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_layout_one, container,
                false);

        ivIcon = (ImageView) view.findViewById(R.id.frag1_icon);
        tvItemName = (TextView) view.findViewById(R.id.frag1_text);

        tvItemName.setText(getArguments().getString(ITEM_NAME));
        ivIcon.setImageDrawable(view.getResources().getDrawable(
                getArguments().getInt(IMAGE_RESOURCE_ID)));
        return view;

    }

}

ListActivity

public class MainTwitter extends ListActivity {

    private ListActivity activity;

    final static String LOG_TAG = "rnc";
     ListView listview;

     TextView text;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.twit_list);

         activity = this;

        downloadTweets();


          listview.setOnItemClickListener(new OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view,
                           int position, long id) {   
                 // selected item
                 String lst_txt = parent.getItemAtPosition(position).toString().trim();

                 System.out.println("Display text"+lst_txt ); 
                 // Launching new Activity on selecting single List Item
                 Intent i = **new Intent(FragmentOne.this, SingleListItem.class);**
                 // sending data to new activity
                 i.putExtra("product",lst_txt );
                 startActivity(i);
               }
            });
    }

    // download twitter timeline after first checking to see if there is a network connection
    public void downloadTweets() {
        TwitterUser o = new TwitterUser();
        String m = o.getValue();

         System.out.println("Kida   "+m);
          listview = this.**getListView();**
          String ScreenName =m;

        ConnectivityManager connMgr = (ConnectivityManager) **getSystemService**(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

        if (networkInfo != null && networkInfo.isConnected()) {
            new DownloadTwitterTask().execute(ScreenName);
        } else {
            Log.v(LOG_TAG, "No network connection available.");
        }
    }

    // Uses an AsyncTask to download a Twitter user's timeline
    private class DownloadTwitterTask extends AsyncTask<String, Void, String> {
        final static String CONSUMER_KEY = "keyXXXXXXXXXXXXX";
        final static String CONSUMER_SECRET = "sXXXXXXXXXXXXXXXXXXX";
        final static String TwitterTokenURL = "https://api.twitter.com/oauth2/token";
        final static String TwitterStreamURL = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=";


        private ProgressDialog progressDialog;  
        @Override
        // can use UI thread here
        protected void onPreExecute() {
        //this.progressDialog = ProgressDialog.show(Boys.this, ""," Look whose back !! Ok Let me see what i have for you ");  
            try{
            progressDialog = **new ProgressDialog(FragmentOne.this,AlertDialog.THEME_HOLO_DARK);**
            progressDialog.setIndeterminate(true);
            progressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.loader_2));
            progressDialog.setMessage("Please Wait ! Unwrapping Something for You...");
            progressDialog.show();
            progressDialog.setCancelable(false);
            progressDialog.setCanceledOnTouchOutside(false);
            }
            catch(Exception e)
            {
                this.progressDialog.dismiss();
                Toast.makeText(**getApplicationContext()**,e.toString(), Toast.LENGTH_LONG).show();

            }
        }

        @Override
        protected String doInBackground(String... screenNames) {
            String result = null;

            if (screenNames.length > 0) {
                result = getTwitterStream(screenNames[0]);
            }
            return result;
        }

        // onPostExecute convert the JSON results into a Twitter object (which is an Array list of tweets
        @Override
        protected void onPostExecute(String result) {
            Twitter twits = jsonToTwitter(result);

            // lets write the results to the console as well
            for (Tweet tweet : twits) {
                Log.i(LOG_TAG, tweet.getText());
            }

          /// ArrayAdapter<Tweet> al = new ArrayAdapter<Tweet>();
            //  listview.setAdapter(new DataAdapter(MainActivity.this,al.toArray(new String[al.size()])));

            System.out.println("Kamina "+ twits);

            // send the tweets to the adapter for rendering
        //  ArrayAdapter adapter = new ArrayAdapter<Tweet>(activity, android.R.layout.simple_list_item_1, twits);
        //  setListAdapter(adapter);


                ArrayAdapter<Tweet> adapter = new ArrayAdapter<Tweet>**(getBaseContext()**,R.layout.customgrid,R.id.texts, twits);
                **setListAdapter**(adapter);



    //      ArrayAdapter myAdapter = new ArrayAdapter (this,twits); 

         //   setListAdapter(myAdapter);

        //    ArrayAdapter<String> ad = new ArrayAdapter<String>(context,R.layout.customgrid,arr);
         //   lst.setAdapter(ad);

            this.progressDialog.dismiss();
        }

        // converts a string of JSON data into a Twitter object
        private Twitter jsonToTwitter(String result) {
            Twitter twits = null;
            if (result != null && result.length() > 0) {
                try {
                    Gson gson = new Gson();
                    twits = gson.fromJson(result, Twitter.class);
                } catch (IllegalStateException ex) {
                    // just eat the exception
                }
            }
            return twits;
        }

        // convert a JSON authentication object into an Authenticated object
        private Authenticated jsonToAuthenticated(String rawAuthorization) {
            Authenticated auth = null;
            if (rawAuthorization != null && rawAuthorization.length() > 0) {
                try {
                    Gson gson = new Gson();
                    auth = gson.fromJson(rawAuthorization, Authenticated.class);
                } catch (IllegalStateException ex) {
                    // just eat the exception
                }
            }
            return auth;
        }

        private String getResponseBody(HttpRequestBase request) {
            StringBuilder sb = new StringBuilder();
            try {

                DefaultHttpClient httpClient = new DefaultHttpClient(new BasicHttpParams());
                HttpResponse response = httpClient.execute(request);
                int statusCode = response.getStatusLine().getStatusCode();
                String reason = response.getStatusLine().getReasonPhrase();

                if (statusCode == 200) {

                    HttpEntity entity = response.getEntity();
                    InputStream inputStream = entity.getContent();

                    BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                    String line = null;
                    while ((line = bReader.readLine()) != null) {
                        sb.append(line);
                    }
                } else {
                    sb.append(reason);
                }
            } catch (UnsupportedEncodingException ex) {
            } catch (ClientProtocolException ex1) {
            } catch (IOException ex2) {
            }
            return sb.toString();
        }

        private String getTwitterStream(String screenName) {
            String results = null;

            // Step 1: Encode consumer key and secret
            try {
                // URL encode the consumer key and secret
                String urlApiKey = URLEncoder.encode(CONSUMER_KEY, "UTF-8");
                String urlApiSecret = URLEncoder.encode(CONSUMER_SECRET, "UTF-8");

                // Concatenate the encoded consumer key, a colon character, and the
                // encoded consumer secret
                String combined = urlApiKey + ":" + urlApiSecret;

                // Base64 encode the string
                String base64Encoded = Base64.encodeToString(combined.getBytes(), Base64.NO_WRAP);

                // Step 2: Obtain a bearer token
                HttpPost httpPost = new HttpPost(TwitterTokenURL);
                httpPost.setHeader("Authorization", "Basic " + base64Encoded);
                httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
                httpPost.setEntity(new StringEntity("grant_type=client_credentials"));
                String rawAuthorization = getResponseBody(httpPost);
                Authenticated auth = jsonToAuthenticated(rawAuthorization);

                // Applications should verify that the value associated with the
                // token_type key of the returned object is bearer
                if (auth != null && auth.token_type.equals("bearer")) {

                    // Step 3: Authenticate API requests with bearer token
                    HttpGet httpGet = new HttpGet(TwitterStreamURL + screenName+"&count=10");

                    // construct a normal HTTPS request and include an Authorization
                    // header with the value of Bearer <>
                    httpGet.setHeader("Authorization", "Bearer " + auth.access_token);
                    httpGet.setHeader("Content-Type", "application/json");
                    // update the results with the body of the response
                    results = getResponseBody(httpGet);
                }
            } catch (UnsupportedEncodingException ex) {
            } catch (IllegalStateException ex1) {
            }
            return results;
        }
    }






}

通过插入ListActivity更新片段给我标记为粗体的错误

public class FragmentOne extends Fragment {
    public boolean net;
    ImageView ivIcon;
    TextView tvItemName;

    public static final String IMAGE_RESOURCE_ID = "iconResourceID";
    public static final String ITEM_NAME = "itemName";
    final static String LOG_TAG = "rnc";
     ListView listview;

    public FragmentOne() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.twit_list, container,
                false);


        downloadTweets();


          listview.setOnItemClickListener(new OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view,
                           int position, long id) {   
                 // selected item
                 String lst_txt = parent.getItemAtPosition(position).toString().trim();

                 System.out.println("Display text"+lst_txt ); 
                 // Launching new Activity on selecting single List Item
                 Intent i = new Intent(MainTwitter.this, SingleListItem.class);
                 // sending data to new activity
                 i.putExtra("product",lst_txt );
                 startActivity(i);
               }
            });







        return view;

    }


    public void downloadTweets() {
        TwitterUser o = new TwitterUser();
        String m = o.getValue();

         System.out.println("Kida   "+m);
          listview = this.getListView();
          String ScreenName =m;

        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

        if (networkInfo != null && networkInfo.isConnected()) {
            new DownloadTwitterTask().execute(ScreenName);
        } else {
            Log.v(LOG_TAG, "No network connection available.");
        }
    }



    // Uses an AsyncTask to download a Twitter user's timeline
        private class DownloadTwitterTask extends AsyncTask<String, Void, String> {
            final static String CONSUMER_KEY = "wfbgrsbsrtbvrts4326243bDkqU";
            final static String CONSUMER_SECRET = "grerrereonbtrsbtrsb454325624364236";
            final static String TwitterTokenURL = "https://api.twitter.com/oauth2/token";
            final static String TwitterStreamURL = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=";


            private ProgressDialog progressDialog;  
            @Override
            // can use UI thread here
            protected void onPreExecute() {
            //this.progressDialog = ProgressDialog.show(Boys.this, ""," Look whose back !! Ok Let me see what i have for you ");  
                try{
                progressDialog = new ProgressDialog(MainTwitter.this,AlertDialog.THEME_HOLO_DARK);
                progressDialog.setIndeterminate(true);
                progressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.loader_2));
                progressDialog.setMessage("Please Wait ! Unwrapping Something for You...");
                progressDialog.show();
                progressDialog.setCancelable(false);
                progressDialog.setCanceledOnTouchOutside(false);
                }
                catch(Exception e)
                {
                    this.progressDialog.dismiss();
                    Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show();

                }
            }

            @Override
            protected String doInBackground(String... screenNames) {
                String result = null;

                if (screenNames.length > 0) {
                    result = getTwitterStream(screenNames[0]);
                }
                return result;
            }

            // onPostExecute convert the JSON results into a Twitter object (which is an Array list of tweets
            @Override
            protected void onPostExecute(String result) {
                Twitter twits = jsonToTwitter(result);

                // lets write the results to the console as well
                for (Tweet tweet : twits) {
                    Log.i(LOG_TAG, tweet.getText());
                }

              /// ArrayAdapter<Tweet> al = new ArrayAdapter<Tweet>();
                //  listview.setAdapter(new DataAdapter(MainActivity.this,al.toArray(new String[al.size()])));

                System.out.println("Kamina "+ twits);

                // send the tweets to the adapter for rendering
            //  ArrayAdapter adapter = new ArrayAdapter<Tweet>(activity, android.R.layout.simple_list_item_1, twits);
            //  setListAdapter(adapter);


                    ArrayAdapter<Tweet> adapter = new ArrayAdapter<Tweet>(getBaseContext(),R.layout.customgrid,R.id.texts, twits);
                    setListAdapter(adapter);



        //      ArrayAdapter myAdapter = new ArrayAdapter (this,twits); 

             //   setListAdapter(myAdapter);

            //    ArrayAdapter<String> ad = new ArrayAdapter<String>(context,R.layout.customgrid,arr);
             //   lst.setAdapter(ad);

                this.progressDialog.dismiss();
            }

            // converts a string of JSON data into a Twitter object
            private Twitter jsonToTwitter(String result) {
                Twitter twits = null;
                if (result != null && result.length() > 0) {
                    try {
                        Gson gson = new Gson();
                        twits = gson.fromJson(result, Twitter.class);
                    } catch (IllegalStateException ex) {
                        // just eat the exception
                    }
                }
                return twits;
            }

            // convert a JSON authentication object into an Authenticated object
            private Authenticated jsonToAuthenticated(String rawAuthorization) {
                Authenticated auth = null;
                if (rawAuthorization != null && rawAuthorization.length() > 0) {
                    try {
                        Gson gson = new Gson();
                        auth = gson.fromJson(rawAuthorization, Authenticated.class);
                    } catch (IllegalStateException ex) {
                        // just eat the exception
                    }
                }
                return auth;
            }

            private String getResponseBody(HttpRequestBase request) {
                StringBuilder sb = new StringBuilder();
                try {

                    DefaultHttpClient httpClient = new DefaultHttpClient(new BasicHttpParams());
                    HttpResponse response = httpClient.execute(request);
                    int statusCode = response.getStatusLine().getStatusCode();
                    String reason = response.getStatusLine().getReasonPhrase();

                    if (statusCode == 200) {

                        HttpEntity entity = response.getEntity();
                        InputStream inputStream = entity.getContent();

                        BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                        String line = null;
                        while ((line = bReader.readLine()) != null) {
                            sb.append(line);
                        }
                    } else {
                        sb.append(reason);
                    }
                } catch (UnsupportedEncodingException ex) {
                } catch (ClientProtocolException ex1) {
                } catch (IOException ex2) {
                }
                return sb.toString();
            }

            private String getTwitterStream(String screenName) {
                String results = null;

                // Step 1: Encode consumer key and secret
                try {
                    // URL encode the consumer key and secret
                    String urlApiKey = URLEncoder.encode(CONSUMER_KEY, "UTF-8");
                    String urlApiSecret = URLEncoder.encode(CONSUMER_SECRET, "UTF-8");

                    // Concatenate the encoded consumer key, a colon character, and the
                    // encoded consumer secret
                    String combined = urlApiKey + ":" + urlApiSecret;

                    // Base64 encode the string
                    String base64Encoded = Base64.encodeToString(combined.getBytes(), Base64.NO_WRAP);

                    // Step 2: Obtain a bearer token
                    HttpPost httpPost = new HttpPost(TwitterTokenURL);
                    httpPost.setHeader("Authorization", "Basic " + base64Encoded);
                    httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
                    httpPost.setEntity(new StringEntity("grant_type=client_credentials"));
                    String rawAuthorization = getResponseBody(httpPost);
                    Authenticated auth = jsonToAuthenticated(rawAuthorization);

                    // Applications should verify that the value associated with the
                    // token_type key of the returned object is bearer
                    if (auth != null && auth.token_type.equals("bearer")) {

                        // Step 3: Authenticate API requests with bearer token
                        HttpGet httpGet = new HttpGet(TwitterStreamURL + screenName+"&count=10");

                        // construct a normal HTTPS request and include an Authorization
                        // header with the value of Bearer <>
                        httpGet.setHeader("Authorization", "Bearer " + auth.access_token);
                        httpGet.setHeader("Content-Type", "application/json");
                        // update the results with the body of the response
                        results = getResponseBody(httpGet);
                    }
                } catch (UnsupportedEncodingException ex) {
                } catch (IllegalStateException ex1) {
                }
                return results;
            }
        }


}

2 个答案:

答案 0 :(得分:0)

您可以通过调用Fragment源代码中的getActivity()来访问片段所附加的活动。

来自片段的getActivity()调用可能会在活动被销毁时返回null,或者在片段未附加到活动时调用它。使用它时只需检查NULL。 您可以使用此片段的方法保存活动:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

答案 1 :(得分:0)

首先 ListView 不在片段中,在活动上,确保您的R.layout.fragment_layout_one布局包含 listview < / strong>然后你可以在**FragmentOne;

上做同样的事情
public class FragmentOne extends Fragment {
       @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            View view = inflater.inflate(R.layout.fragment_layout_one, container,
                    false);

            //prepare the ListView
            listview = (ListView)  view.findViewById(R.id.listview);

            //a collection to fill the listview adapter.
            String items  = new String[]{"item1", "item2"}

            ArrayAdapter<String> itemsAdapter = 
            new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);


            //set an adapter
            listview.setAdapter(itemsAdapter );


            //other views...
            return view;

        }

}

希望它有所帮助。