2016-09-26 59 views
1

我无法在OneFragment的textView中显示字符串描述的值。 我是新来的Android程序,任何帮助将是appreciated.`如何将变量从活动传递到片段

这里是MainActivity

package com.example.dell.myop; 

import android.content.Intent; 
import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 


import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 

import com.example.dell.myop.R; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.widget.TextView; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


import com.example.dell.myop.fragments.OneFragment; 

import com.example.dell.myop.fragments.ThreeFragment; 
import com.example.dell.myop.fragments.TwoFragment; 





public class MainActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    String description; 






    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 



     setContentView(R.layout.activity_main); 
     DownloadTask task = new DownloadTask(); 
     task.execute("http://api.openweathermap.org/data/2.5/weather?q=hamirpur,india&appid=41352ca35dd1be72cc7d9f47351d1b41"); 



     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
    } 




    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new OneFragment(), "Today"); 
     adapter.addFragment(new TwoFragment(), "Tomorrow"); 
     adapter.addFragment(new ThreeFragment(), "Day After"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

DownloadTask

package com.example.dell.myop; 

import android.content.Intent; 
import android.os.AsyncTask; 
import android.util.Log; 

import com.example.dell.myop.fragments.OneFragment; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

import static android.support.v4.app.ActivityCompat.startActivity; 

public class DownloadTask extends AsyncTask<String,Void,String> { 





    @Override 
    protected String doInBackground(String... urls) { 

     String result = ""; 
     URL url; 
     HttpURLConnection urlConnection= null; 


     try { 
      url = new URL(urls[0]); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      InputStream in = urlConnection.getInputStream(); 
      InputStreamReader reader = new InputStreamReader(in); 
      int data = reader.read(); 
      while(data!=-1){ 
       char current = (char)data; 
       result += current; 
       data = reader.read(); 


      } 
      return result; 


     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     try { 
      JSONObject jObject = new JSONObject(result); 
      JSONArray jArray = jObject.getJSONArray("weather"); 
      for (int i=0; i < jArray.length(); i++) 
      { 
       try { 
        JSONObject oneObject = jArray.getJSONObject(i); 
        // Pulling items from the array 
        String main = oneObject.getString("main"); 
        String description = oneObject.getString("description"); 
        Log.i("main",main); 
        Log.i("description",description); 






       } catch (JSONException e) { 
        // Oops 
       } 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 


    } 
} 

这里是OneFragment

package com.example.dell.myop.fragments; 

/** 
* Created by Dell on 13-09-2016. 
*/ 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.example.dell.myop.DownloadTask; 
import com.example.dell.myop.MainActivity; 
import com.example.dell.myop.R; 

import com.example.dell.myop.R; 


public class OneFragment extends Fragment{ 







    public OneFragment() { 

    } 

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




    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 
     TextView textView = (TextView) view.findViewById(R.id.textView); 

     textView.setText(description); 
     return view; 
    } 




} 
+0

片段具有setArguments ()方法。 –

回答

0

你加一个函数setDescription(String text)给片段。在活动中,你得到这个片段然后调用该函数。该函数应该设置textview。

0

要将AsyncTask中的值传回给启动它的Activity,可以将Activity对象注入到Task中,然后调用Activity对象的方法来传回结果。

就你而言,你可以重写DownloadTask构造函数以将Activity作为参数。然后当任务完成时,你可以调用一个方法,例如activity.setDescription(description)将该值提供给活动。该活动然后将更改片段的UI。

我也是Android新手,所以请原谅我,如果有更好的方式做到这一点。

0

使用这样的事情,从活动

EditOption editOption = new EditOption();-- your fragment 
      Bundle args = new Bundle(); 
      args.putInt("id", z); 
      args.putString("title",title); 
      args.putString("desc",des); 
      editOption.setArguments(args); 

发送的片段

  String title = getArguments().getString("title"); 
      String des = getArguments().getString("desc"); 
      z= getArguments().getInt("id"); 

编辑代码根据你的情况,

希望这有助于

+0

如何在AsyncTask完成后发送数据? –

相关问题