2014-12-16 2 views
0

Я работаю над ящиком Navigaion, и у меня есть активность ListActivity и Fragment. И я хочу видеть ListActivity во Фрагменте. Но это дает мне ошибку при вставке кода ListActivity во фрагмент. Я прошел через Интернет, но не получил никакого эффективного результата.Как вставить 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; 
      } 
     } 


} 
+0

Какая ошибка вы получаете? – Rohit5k2

+0

@ Rohit5k2 Фактически, когда я вставляю код listactivity в Fragment, он показывает много ключевых слов красной линии в eclipse и напрямую вызывает listactivity делает исключение нулевого указателя – Creator

ответ

0

Вы можете получить доступ к деятельности этот фрагмент прилагается по телефону getActivity() в исходном коде фрагмента.

getActivity() Вызов из фрагмента может возвращать значение null, когда действие уничтожено, или вы вызываете его, когда фрагмент еще не привязан к действию. Просто проверьте NULL при его использовании. Вы можете сохранить активность от метода этого фрагмента:

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

, вы хотите, чтобы я написал этот код в разделе Фрагмент. Или я не понимаю. '@Override \t public void onAttach (ListActivity activity) { \t super.onAttach (activity); \t} ' – Creator

+0

Во-первых, метод getActivity()' можно вызывать в любом классе, расширяет 'Fragment'. Вы можете использовать этот метод и применить его к вашему желаемому типу активности. Вторичный, '@Override public void onAttach (активность ListActivity) {super.onAttach (активность); } '- это супер метод, который в классе« Фрагмент »можно переопределить для взаимодействия с активностью, когда к нему прикреплен фрагмент. – leegor

0

прежде всего вашего ListView в не в фрагменте, его на операцию, убедитесь, что ваш макет R.layout.fragment_layout_one имеет listview, то вы можете сделать что-то подобное на своем **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; 

     } 

} 

Надеюсь, что это поможет.

+0

Я скопировал весь код ListActivity для Fragment, но он отображает слишком много ошибок красной линии eclipse и не может исправить всю ошибку. Можете ли вы изменить приведенный выше код и показать мне правильный код, пожалуйста, – Creator

+0

. Я сделаю twit_list.xml, у которого есть listview, тот же xml, что и для listactivity. Я хочу, когда я выбираю опцию из навигационного ящика, открывая активность списка, а не фрагмент. – Creator

+0

Я обновил класс Fragment, но дает мне ошибку. Вы можете проверить его – Creator

Смежные вопросы