2015-07-08 3 views
0

Я разрабатываю приложение для Android, в котором у меня есть 12 динамических фреймов, в которых макет кадра имеет текстовое представление, видео и кнопку воспроизведения/паузы над ним. Я хочу получить текст в поле «Текстовое представление» JSON. Но моя проблема в том, что когда я получаю текст в поле «Текстовое представление», используя текст JSON, появится в 12-м кадре, а остальная часть из 11 кадров пуста. Я не знаю, как решить эту проблему.Как извлечь текст в поле Textview через JSON в android?

public class MainActivity extends Activity { 

String moviename; 
private ProgressDialog pDialog; 
VideoView vv; 
TextView showingat, movie; 
FrameLayout frame; 
ArrayList<String> abc; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.navigationbar); 

    abc = new ArrayList<>(); 
    new Theaterflow().execute(); 
    //Main Relative layout. 
    final RelativeLayout rl = (RelativeLayout)findViewById(R.id.MainRelativeLayout); 
    //Main Scrollview. 
    final ScrollView sv = (ScrollView) findViewById(R.id.scrollView); 
    //Main Linearlayout. 
    final LinearLayout ll = (LinearLayout) findViewById(R.id.LinearLayout1); 

    //Dynamically creation of Layouts. 
    FrameLayout.LayoutParams playpausebtn = new FrameLayout.LayoutParams(70, 70); 
    FrameLayout.LayoutParams sound = new FrameLayout.LayoutParams(55, 35); 
    FrameLayout.LayoutParams nowshwingat = new FrameLayout.LayoutParams(200, 60); 
    FrameLayout.LayoutParams movie_name = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 60); 

    //Defining array for framelayout. 

    ArrayList fHolder = new ArrayList(); 
    int l = 12; 
    for (int i = 0; i<=l; i++) { 
     //Dynamically frameslayout for video 
     fHolder.add(frame); 
     frame = new FrameLayout(this); 
     FrameLayout.LayoutParams frameparams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 350); 
     frameparams.setMargins(0, 2, 0, 0); 
     frame.setId(i + 1); 
     frame.setMinimumHeight(350); 
     ll.addView(frame); 

     // Video over frames 
     vv = new VideoView(this); 
     vv.setId(i + 1); 
     vv.setLayoutParams(frameparams); 
     vv.setMinimumHeight(350); 
     frame.addView(vv); 

     //Pause btn over video 
     Button pausebtn = new Button(this); 
     pausebtn.setId(i + 1); 
     pausebtn.setBackgroundResource(R.drawable.pause); 
     pausebtn.setLayoutParams(playpausebtn); 
     playpausebtn.gravity = Gravity.CENTER; 
     frame.addView(pausebtn); 

     //Play btn over video 
     Button playbtn = new Button(this); 
     playbtn.setLayoutParams(playpausebtn); 
     playbtn.setId(i + 1); 
     playbtn.setBackgroundResource(R.drawable.playy); 
     playpausebtn.gravity = Gravity.CENTER; 
     frame.addView(playbtn); 


     //Sound btn over video 
     Button soundbtn = new Button(this); 
     soundbtn.setLayoutParams(sound); 
     soundbtn.setId(i + 1); 
     soundbtn.setBackgroundResource(R.drawable.sound); 
     sound.setMargins(0, 15, 5, 0); 
     sound.gravity = Gravity.RIGHT; 
     frame.addView(soundbtn); 

     //now showing at over video 
     showingat = new TextView(this); 
     showingat.setLayoutParams(nowshwingat); 
     showingat.setText("Now showing at "); 
     showingat.setTextSize(15); 
     showingat.setTextColor(getResources().getColor(R.color.white)); 
     nowshwingat.setMargins(10, 0, 0, 0); 
     nowshwingat.gravity = Gravity.LEFT | Gravity.BOTTOM; 
     frame.addView(showingat); 

     movie = new TextView(MainActivity.this); 
     movie.setLayoutParams(movie_name); 
     movie.setId(i+1); 
     movie.setText(" "); 
     movie.setTextSize(15); 
     movie.setTextColor(getResources().getColor(R.color.white)); 
     movie_name.setMargins(10, 10, 0, 0); 
     movie_name.gravity = Gravity.TOP | Gravity.LEFT; 
     frame.addView(movie); 


    } 


} 

private class Theaterflow extends AsyncTask<String, Void, String> { 


    // URL to get contents JSON 
    String url = "http://filfest.in/demo/theater/first-theater-data.php"; 
    JSONArray contents = null; 

    protected void onPreExecute() { 

     super.onPreExecute(); 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Loading Data ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

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

     ArrayList arraylist = new ArrayList<HashMap<String, String>>(); 
     ServiceHandler sh = new ServiceHandler(); 
     // Making a request to url and getting response 
     String jsonstr = sh.makeServiceCall(url, null); 

     if (jsonstr != null) { 
      try { 

       JSONObject jObject1 = new JSONObject(jsonstr); 
       contents = jObject1.optJSONArray("contents"); 
       for (int i = 0; i < contents.length(); i++) { 

        JSONObject c1 = contents.getJSONObject(i); 
        moviename = c1.getString("movie_name"); 
        abc.add(moviename); 
       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 
    public void onPostExecute(String result) { 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 
     for (int i=0;i<abc.size();i++) 
     { 
      movie.setText(moviename); 
     } 

    } 


} 

}

+0

потому что у вас есть только один экземпляр фильма, а не 11 –

+0

Тогда как я делаю это –

+0

@nirajkumar Вы должны понять это сами, учитывая подсказку. – LightYearsBehind

ответ

0

внутри вашей петли для

movie = new TextView(MainActivity.this);  
movie.setTag(i); 

insid Ваш onPost() цикл

final int childCount = ll.getChildCount(); 

      for (int y = 0; y < childCount; y++) { 
       final View child = ll.getChildAt(y); 
       if (child instanceof FrameLayout) { 
        int childs = ((FrameLayout) child).getChildCount(); 
        for (int j = 0; j < childs; j++) { 
         final View childViews = ((ViewGroup) child) 
           .getChildAt(j); 
         if (childViews instanceof TextView) { 
          final Object tagObj = childViews.getTag(); 
          if (tagObj != null && tagObj.equals(i)) { 
           ((TextView) childViews).setText("Movie " 
             + i); 
          } 
         } 

        } 

       } 

      } 
+0

Эти коды находятся внутри: for (int i = 0; i

+0

да все внутри цикла for –

+0

Это дает мне пустой экран –

0

Добавить Programatically вид в LinearLayout:

layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/llParent" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</LinearLayout> 

Activity.java:

LinearLayout llParent = (LinearLayout)findViewById(R.id.llParent); 

onPostExecute() из AsyncTask:

for (int i=0;i<Your_ArrayList.size(); i++){ 
    TextView txtView = new TextView(this); 
    txtView.setText(Your_ArrayList.get(i).getMovieName()); 
    llParent.addView(txtView); 
} 

Edit:

llParent.invalidate(); 

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

+0

нет, это не поможет мне, я попробовал –

+0

@nirajkumar, я отредактировал свой ответ, пожалуйста, проверьте его –

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