2016-04-19 4 views
0

現在、ユーザーからの入力としてムービー名を取得するアプリケーションを作成しています。その入力後、ムービーのリスト項目を表示する新しい画面が表示され、そのムービーのリストは「http://www.omdbapi.com/」 IMDB。リストの項目(ムービー名)をクリックすると、そのムービーの詳細が別の画面に表示されます。入力が終わる前にすべてがうまくいきました。私はムービー名をハードコードしていますが、今はユーザーが入力して欲しいと思っています。テキストの編集ユーザーからの入力を取得できません。EditTextはRecyclerViewアダプタでは機能しません。ランダムデータがデバイスに表示されます

MainActivityクラス

public class MainActivity extends AppCompatActivity { 
private static String LOG_TAG = MainActivity.class.getSimpleName(); 
private EditText editText; 
private Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editText = (EditText) findViewById(R.id.editText); 
    button = (Button) findViewById(R.id.button1); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      validateInput(); 
     } 
    }); 

} 

private void validateInput() { 
    String input = editText.getText().toString(); 

    if (input != null || !input.equals("")) { 
     Intent intent = new Intent(this, MovieFragment.class); 
     intent.putExtra(Intent.EXTRA_TEXT, input); 
     startActivity(intent); 
    } 


    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

MovieFragmentクラス

public class MovieFragment extends Fragment implements OnNetworkCallHandled, RecyclerViewAdapter.OnClickListener { 
private String movieName; 
private Button button; 
private RecyclerViewAdapter adapter; 
private RecyclerView recyclerView; 
private EditText editText; 

private DataWrapper list; 

public MovieFragment() { 
} 


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

    Intent intent = getActivity().getIntent(); 
    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView); 

    if (intent != null && intent.hasExtra(Intent.EXTRA_TEXT)) { 
     movieName = intent.getStringExtra(Intent.EXTRA_TEXT); 
     ((TextView) rootView.findViewById(R.id.detail_text)).setText(movieName); 
    } 
    getMovieDetails(); 
    return rootView; 

} 

private void getMovieDetails() { 
    MovieTask movieAsyncTask = new MovieTask(this, movieName); 
    movieAsyncTask.execute(); 
} 

@Override 
public void onNetworkcallSuccess(Object object) { 
    System.out.println("On success"); 
    String result = (String) object; 
    Gson gson = new Gson(); 
    list = gson.fromJson(result, DataWrapper.class); 
    adapter = new RecyclerViewAdapter(list.getSearch(), getContext(), this); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
    recyclerView.setAdapter(adapter); 
    System.out.println("On success"); 
} 

@Override 
public void onNetworkcallFailure(Object object) { 
    System.out.println("On failure"); 
} 

@Override 
public void onClick(View view, int position, long itemId) { 
    startActivity(position); 
    System.out.println(); 
} 

private void startActivity(int position) { 
    Intent intent = new Intent(getActivity(), DetailActivity.class); 
    Bundle extras = new Bundle(); 
    extras.putString("Title",list.getSearch().get(position).getTitle()); 
    extras.putString("Year", list.getSearch().get(position).getYear()); 
    intent.putExtras(extras); 
    startActivity(intent); 
} 

}

DetailActivityクラス

public class DetailActivity extends AppCompatActivity { 
private TextView Title; 
private TextView Year; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_detail); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    Intent intent = getIntent(); 
    Bundle extras = intent.getExtras(); 


    Title = (TextView) findViewById(R.id.Title); 
    Year = (TextView) findViewById(R.id.Year); 

    if (intent != null) { 
     String title = extras.getString("Title"); 
     String year=extras.getString("Year"); 
     Title.setText(title); 
     Year.setText(year); 
     System.out.println(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

}

MovieTask拡張AsyncTaskクラス

public class MovieTask extends AsyncTask<Void, Void, String> { 
private String LOG_TAG = MovieTask.class.getSimpleName(); 
private String response = ""; 
private String movieName; 
private OnNetworkCallHandled onNetworkCallHandled; 


public MovieTask(OnNetworkCallHandled onNetworkCallHandled, String movieName) { 
    this.onNetworkCallHandled = onNetworkCallHandled; 
    this.movieName = movieName; 


} 

@Override 
protected String doInBackground(Void... params) { 
    HttpURLConnection urlConnection = null; 
    BufferedReader reader = null; 
    String MovieJsonStr = null; 


    try { 
     final String MOVIE_BASE_URL = "http://www.omdbapi.com/?"; 
     final String s = "s"; 
     final String plot = "plot"; 
     final String r = "r"; 
     final String page = "page"; 

     Uri builtUri = Uri.parse(MOVIE_BASE_URL).buildUpon() 
       .appendQueryParameter(s, movieName) 
       .appendQueryParameter(plot, "full") 
       .appendQueryParameter(r, "json") 
       .appendQueryParameter(page, "1") 
       .build(); 

     URL url = new URL(builtUri.toString()); 

     urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.connect(); 

     InputStream inputStream = urlConnection.getInputStream(); 
     StringBuffer buffer = new StringBuffer(); 
     if (inputStream == null) { 
      return null; 
     } 
     reader = new BufferedReader(new InputStreamReader(inputStream)); 

     String line; 
     while ((line = reader.readLine()) != null) { 
      buffer.append(line + "\n"); 
     } 

     if (buffer.length() == 0) { 
      return null; 
     } 
     response = buffer.toString(); 

    } catch (Exception e) { 

    } 

    return response; 
} 

@Override 
protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
    if (result != null || !result.equals("")) { 
     onNetworkCallHandled.onNetworkcallSuccess(result); 

    } else { 
     onNetworkCallHandled.onNetworkcallFailure(true); 
    } 
} 

}

RecyclerViewAdapterクラス

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MovieDetailsHolder> { 

private ArrayList<MovieDetails> movieDetails; 
private Context context; 
private OnClickListener onClick; 

RecyclerViewAdapter(ArrayList<MovieDetails> movieDetails, Context context, OnClickListener onClick) { 
    this.onClick = onClick; 
    this.movieDetails = movieDetails; 
    this.context = context; 
} 

@Override 
public MovieDetailsHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false); 
    return new MovieDetailsHolder(view); 
} 

@Override 
public void onBindViewHolder(MovieDetailsHolder holder, final int position) { 
    holder.tVMovieName.setText(movieDetails.get(position).getTitle()); 
    Picasso 
      .with(context) 
      .load(movieDetails.get(position).getPoster()) 
      .into(holder.iVPoster); 

    holder.setOnClickListener(onClick); 
} 

@Override 
public int getItemCount() { 
    return movieDetails.size(); 
} 

public static class MovieDetailsHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
    private OnClickListener onClickListener; 

    CardView cv; 
    TextView tVMovieName; 
    ImageView iVPoster; 

    MovieDetailsHolder(View itemView) { 
     super(itemView); 
     cv = (CardView) itemView.findViewById(R.id.cardView); 
     tVMovieName = (TextView) itemView.findViewById(R.id.tVMovieName); 
     iVPoster = (ImageView) itemView.findViewById(R.id.iVPoster); 

     itemView.setOnClickListener(this); 
    } 

    public void setOnClickListener(OnClickListener onClickListener) { 
     this.onClickListener = onClickListener; 
    } 

    @Override 
    public void onClick(View v) { 
     onClickListener.onClick(v, getPosition(), getItemId()); 
    } 
} 

public interface OnClickListener { 
    public void onClick(View view, int position, long itemId); 
} 

}

答えて

0

あなたは活動としてMovieFragmentを扱っている

 Intent intent = new Intent(this, MovieFragment.class); 
     intent.putExtra(Intent.EXTRA_TEXT, input); 
     startActivity(intent); 

しかし、MovieFragmentはフラグメントです。あなたの活動にMovieFragmentを追加/交換する必要があります。

また、setContentView(R.layout.activity_main);する必要が

+0

validateInput()に再び存在しないので、私は意図を受信するための別のアクティビティを追加する何をすべきか?フラグメント – user3641957

+0

を使用する代わりに、フラグメントのみを使用することはできますが、フラグメントを起動する方法は異なります。これをチェック - http://developer.android.com/training/basics/fragments/fragment-ui.html –

関連する問題