Refresh/update 列表视图当前选项卡

Refresh/update listview current tab

我有三个标签,其中有一个独特的片段。如何通过图像: 3 tab and a fragment 第一个问题 是当我点击 "I watch it" 一部电影并在已观看的选项卡上滑动时,此选项卡没有更新。

https://i.imgur.com/AnnN3Zq.png?1

https://i.imgur.com/DsLGn3r.png 如果我在 Notify 的选项卡上 swipe/tap 并在 Watched 的选项卡上回来,该选项卡已更新。为什么?我哪里错了?

CoreActivity.java

package com.example.msnma.movienotifier;


import android.annotation.TargetApi;
import android.app.FragmentTransaction;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import com.example.msnma.movienotifier.MoviesFragment;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TabHost;
import android.widget.Toast;

import com.example.msnma.movienotifier.adapter.MoviesAdapter;
import com.example.msnma.movienotifier.notify.NotificationReceiver;

import com.example.msnma.movienotifier.event.TwoPaneEvent;

import org.greenrobot.eventbus.EventBus;

import butterknife.BindView;

import static android.support.v4.view.PagerAdapter.POSITION_NONE;
import static com.google.common.reflect.Reflection.initialize;
import static java.security.AccessController.getContext;

public class CoreActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener {


    SectionsPageAdapter mSectionsPageAdapter;
    @BindView(R.id.movies)
    ViewPager mViewPager;
    @BindView(R.id.tabs)
    TabLayout tabLayout;

    boolean twoPane;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_core);
        Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(toolbar);

        if (findViewById(R.id.movie_detail) != null) {
            twoPane = true;
        }
        mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager(), twoPane);

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setOffscreenPageLimit(1);
        mViewPager.setAdapter(mSectionsPageAdapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);
        tabLayout.addOnTabSelectedListener(
                new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) {
                    @Override
                    public void onTabSelected(TabLayout.Tab tab) {
                        super.onTabSelected(tab);
                        final int numTab = tab.getPosition();

                        //Toast.makeText(getApplicationContext(),tab.getText(), Toast.LENGTH_LONG).show();
                         switch (tab.getPosition()) {
                             case 0: {

                                 MoviesAdapter.setTipo(String.valueOf(MoviesFragment.Type.NOTIFY));
                                 break;
                             }
                             case 1: {
                                 MoviesAdapter.setTipo(String.valueOf(MoviesFragment.Type.SUGGESTED));
                                 break;
                             }

                             case 2: {

                                 MoviesAdapter.setTipo(String.valueOf(MoviesFragment.Type.WATCHED));
                                 break;
                             }

                         }


                    }

                });
        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

                                               @Override
                                               public void onPageSelected(int position) {

                                                   //mViewPager.setCurrentItem(position);
                                                   // ci sono vicinissimo alla soluzione.
                                                   if(position == 0 || position == 2) {
                                                       Fragment getFragment = getSupportFragmentManager().getFragments().get(position);
                                                       if (getFragment instanceof MoviesFragment) {
                                                           MoviesFragment thisFragment = (MoviesFragment) getFragment;
                                                           thisFragment.onRefresh();
                                                           Log.i("REFRESH","Dovrebbe essere refreshato");
                                                       }
                                                       Log.i("PAGINASELEZIONATA", "Esegue onResume " + position);

                                                   }
                                                       //Toast.makeText(CoreActivity.this,"Tab "+position,Toast.LENGTH_LONG).show();





                                               }

                                               @Override
                                               public void onPageScrolled(int arg0, float arg1, int arg2) {
                                               }

                                               @Override
                                               public void onPageScrollStateChanged(int arg0) {
                                               }


                                           });
                EventBus.getDefault().postSticky(new TwoPaneEvent(twoPane));
    }

    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_second, menu);
        //MenuItem item = menu.findItem(R.id.search);
        //searchView.setMenuItem(item);
        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);
    }



    public void pressAccountButton(MenuItem item)
    {
        Intent intent = new Intent(this, AccountActivity.class);

        startActivity(intent);
    }

    //nuovo codice
    @Override
    protected void onResume()
    {
        super.onResume();

        if (!(mSectionsPageAdapter == null)) {
            mSectionsPageAdapter.notifyDataSetChanged();
            Log.i("INFOonResume", "Metodo onResume eseguito");
        }


    }

    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        //Log.i("INFOTAB", "La tabella selezionata è "+tab.getTag());
        onResume();


    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {

    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }



}

Tap Notify's tap (believe also could tap on Suggested) and tap again Watched's tap

第二题
在 Watched 的选项卡中,textView 被剪切了,为什么?我该如何解决这个问题?

MoviesAdapter.java

package com.example.msnma.movienotifier.adapter;

import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;

import com.example.msnma.movienotifier.MainActivity;
import com.example.msnma.movienotifier.MoviesFragment;
import com.example.msnma.movienotifier.R;
import com.example.msnma.movienotifier.database.MovieDatabase;
import com.example.msnma.movienotifier.databaseModel.MovieDBModel;
import com.example.msnma.movienotifier.model.Movie;

import java.util.Calendar;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Optional;

import static android.app.PendingIntent.getActivity;
import static com.example.msnma.movienotifier.MoviesFragment.*;

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.ViewHolder>{

    private Context context;
    private List<Movie> movies;
    private View itemView;
    private RecyclerView rv;

    //per la data
    private EditText fromDateEtxt;
    private boolean active = false;
    //private Context context;
    private static String tipo = "NOTIFY";

    public MoviesAdapter(Context context, List<Movie> movies) {
        this.context = context;
        this.movies = movies;
    }

    @Override
    public MoviesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {

            View itemView;
            /*if(getTipo().equals("Suggested"))
            {
                itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_movie, parent, false);
                return new ViewHolder(itemView);
            }
                else if(getTipo().equals("Watched"))
                {
                    itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_movie_watched, parent, false);
                    return new ViewHolder(itemView);
                }
                else if(getTipo().equals("Notify"))
            {*/

                itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_movie, parent, false);

                return new ViewHolder(itemView);
            //}


        //return null;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        Movie movie = movies.get(position);
        Glide.with(context)
                .load(movie.getPosterUrl())
                .placeholder(R.drawable.poster_placeholder)
                .into(holder.posterView);
        holder.title_movie.setText(movie.getTitle());
        // prende solo la data + anno
        String yourString = String.valueOf(movie.getReleaseDate());
        String date = yourString.substring(0, 10);
        String year = yourString.substring(yourString.length()-5,yourString.length());
        holder.release_date.setText(date+year);
        if(getTipo().equals("NOTIFY"))
        {
            Toast.makeText(context,"Notify", Toast.LENGTH_LONG).show();
            holder.notifyButton.setVisibility(View.GONE);
            holder.watchedButton.setVisibility(View.GONE);
            holder.removeButton.setVisibility(View.VISIBLE);
        }
        //solo se è di tipo suggested
        if(getTipo().equals("SUGGESTED"))
        {
            //disabilitare bottone remove


            holder.removeButton.setVisibility(View.GONE);
            holder.notifyButton.setVisibility(View.VISIBLE);
            holder.watchedButton.setVisibility(View.VISIBLE);
            Toast.makeText(context,"Suggested", Toast.LENGTH_LONG).show();

            holder.notifyButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                /*String testo = movies.get(position).getTitle().toString();
               Toast tostato = Toast.makeText(context,testo,Toast.LENGTH_SHORT);
                tostato.show();*/
                    alertFormElements(position);
                }
            });
            holder.watchedButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                /*String testo = movies.get(position).getTitle()+ "\n" + "I WATCH IT";
                Toast tostato = Toast.makeText(context,testo,Toast.LENGTH_SHORT);
                tostato.show();*/

                    // public MovieDBModel(int id, String title,  String overview, String posterUrl, String backdropUrl, String trailerUrl,
                    //                        Date releaseDate, float rating, boolean adult){
                    MovieDBModel mdm = new MovieDBModel(movies.get(position).getId(), movies.get(position).getTitle(), movies.get(position).getOverview(),
                            movies.get(position).getPosterUrl(), movies.get(position).getBackdropUrl(), movies.get(position).getTrailerUrl(),
                            movies.get(position).getReleaseDate(), movies.get(position).getRating(), movies.get(position).isAdult());
                    MovieDatabase.insertMovie(mdm, 2, MainActivity.getMovieDatabase());
                    String testo = "Added " + movies.get(position).getTitle() + "\n" + "in tab watched";
                    Toast tostato = Toast.makeText(context, testo, Toast.LENGTH_SHORT);
                    tostato.show();
                }
            });
         }
         if (getTipo().equals("WATCHED"))
        {


            holder.notifyButton.setVisibility(View.GONE);
            holder.watchedButton.setVisibility(View.GONE);
            holder.removeButton.setVisibility(View.VISIBLE);

            holder.removeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view)
                {
                 //da implementare
                }
            });
            Toast.makeText(context,"WATCHED", Toast.LENGTH_LONG).show();
        }





    }


    //nuovo codice riguardo l'alerDialog

    public final void alertFormElements(final int position)
    {

        /*
         * Inflate the XML view. activity_main is in
         * res/layout/form_elements.xml
         */
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View formElementsView = inflater.inflate(R.layout.form_elements,
                null, false);

        // You have to list down your form elements
        /*final CheckBox myCheckBox = (CheckBox) formElementsView
                .findViewById(R.id.myCheckBox);*/

        final RadioGroup genderRadioGroup = (RadioGroup) formElementsView
                .findViewById(R.id.NotifyAlertRadioGroup);
        //nuovo codice
        genderRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
                                       {
                                           @Override
                                           public void onCheckedChanged(RadioGroup group, int checkedId)
                                           {
                                               switch (checkedId)
                                               {
                                                   case R.id.OneDayRadioButton:
                                                       actv(false);
                                                       break;

                                                   case R.id.ReleaseDayRadioButton:
                                                       actv(false);
                                                       break;

                                                   case R.id.OnRadioButton:
                                                       actv(true);
                                                       break;
                                               }
                                           }

                                       });

        //questo sarà sostituito con un calendario.
        /*final EditText nameEditText = (EditText) formElementsView
                .findViewById(R.id.nameEditText);*/

        //parte data
        fromDateEtxt = (EditText) formElementsView.findViewById(R.id.nameEditText);
        fromDateEtxt.setEnabled(active);
        fromDateEtxt.setClickable(active);
        fromDateEtxt.setInputType(InputType.TYPE_NULL);
        fromDateEtxt.requestFocus();


        //metodo data
        //setDateTimeField();
        //fromDatePickerDialog.show();

        fromDateEtxt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Calendar c = Calendar.getInstance();
                DatePickerDialog dpd = new DatePickerDialog( context ,
                        new DatePickerDialog.OnDateSetListener() {
                            @Override
                            public void onDateSet(DatePicker view, int year,
                                                  int monthOfYear, int dayOfMonth) {
                                fromDateEtxt.setText(dayOfMonth + "-"
                                        + (monthOfYear + 1) + "-" + year);

                            }
                        },
                        c.get(Calendar.YEAR),
                        c.get(Calendar.MONTH),
                        c.get(Calendar.DAY_OF_MONTH));
                dpd.show();
            }
        });




        // the alert dialog
        new AlertDialog.Builder(context).setView(formElementsView)
                .setTitle(movies.get(position).getTitle()+" Notify")
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @TargetApi(11)
                    public void onClick(DialogInterface dialog, int id) {

                        //fromDateEtxt.setText(dateFormatter.format(newDate.getTime()));

                        String toastString = "";
                        String titleMovie = movies.get(position).getTitle();
                        String releaseDate = String.valueOf(movies.get(position).getReleaseDate());
                        String date = releaseDate.substring(0, 10);
                        String year = releaseDate.substring(releaseDate.length()-5,releaseDate.length());
                        releaseDate = date+year;

                        toastString = toastString + titleMovie + "\n" + releaseDate +"\n";



                        /*
                         * Detecting whether the checkbox is checked or not.
                         */
                        /*if (myCheckBox.isChecked()) {
                            toastString += "Happy is checked!\n";
                        } else {
                            toastString += "Happy IS NOT checked.\n";
                        }*/

                        /*
                         * Getting the value of selected RadioButton.
                         */
                        // get selected radio button from radioGroup
                        int selectedId = genderRadioGroup.getCheckedRadioButtonId();

                        // find the radiobutton by returned id
                        RadioButton selectedRadioButton = (RadioButton) formElementsView
                                .findViewById(selectedId);

                        if(selectedRadioButton.getId() == R.id.OnRadioButton)
                        {
                            toastString += "Selected radio button is: " + fromDateEtxt.getText();
                        }
                        else {
                            toastString += "Selected radio button is: "
                                    + selectedRadioButton.getText() + "!\n";
                        }




                        /*
                         * Getting the value of an EditText.
                         */
                        /*toastString += "Name is: " + nameEditText.getText()
                                + "!\n";*/

                        Toast toast =  Toast.makeText(context, toastString, Toast.LENGTH_LONG);
                        toast.show();

                        dialog.cancel();
                    }

                }).show();
    }

    //nuovo codice
    /*@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item_movie, null);
            holder = new ViewHolder();


            holder.title_movie = (TextView) convertView.findViewById(R.id.movie_title);
            holder.release_date = (TextView) convertView
                    .findViewById(R.id.movie_release_date);

            Movie row_pos = movies.get(position);

            //holder.profile_pic.setImageResource(row_pos.getProfile_pic_id());
            holder.title_movie.setText(row_pos.getTitle());
            holder.release_date.setText((CharSequence) row_pos.getReleaseDate());
            //holder.contactType.setText(row_pos.getContactType());

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        return convertView;
    }*/

    @Override
    public void onViewRecycled(ViewHolder holder) {
        super.onViewRecycled(holder);
        Glide.clear(holder.posterView);
    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.poster)
        public ImageView posterView;
        @BindView(R.id.movie_title)
        public TextView title_movie;
        @BindView(R.id.movie_release_date)
        public TextView release_date;
        @BindView(R.id.editNotify)
        public Button notifyButton;
        @BindView(R.id.iWatchItMovie)
        public Button watchedButton;
        @BindView(R.id.remove)
        public Button removeButton;



        public ViewHolder(View v) {
            super(v);
            ButterKnife.bind(this, v);
        }
    }

    //parte per attivare/disattivare l'editText



    private void actv(final boolean active)
    {
        fromDateEtxt.setEnabled(active);
        if (active)
        {
            fromDateEtxt.requestFocus();
        }
    }

    public static void setTipo(String tipo) {
        MoviesAdapter.tipo = tipo;
    }

    public static String getTipo() {
        return tipo;
    }
}

首先,你可以尝试在onPageScrolled中加入类似的逻辑

Fragment getFragment = getSupportFragmentManager().getFragments().get(position);
if (getFragment instanceof MoviesFragment) {
    MoviesFragment thisFragment = (MoviesFragment) getFragment;
    if ((position == 0 || position == 2) && positionOffset == 0.0 && positionOffsetPixels == 0)
        thisFragment.onRefresh();
}

这是我的list_item_movie.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="350px">
    <!--android:layout_height="?android:attr/listPreferredItemHeight">-->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp"
        android:layout_marginTop="4dp"
        android:layout_marginBottom="4dp"
        android:background="@drawable/card_background">

        <ImageView
            android:id="@+id/poster"
            android:layout_width="185px"
            android:layout_height="277px"
            android:src="@drawable/poster_placeholder"
            android:scaleType="centerCrop"
            android:contentDescription="TODO" />
       <LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:orientation="vertical"
           android:gravity="center_vertical">
         <TextView
            android:id="@+id/movie_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
             android:textStyle="bold"
            android:layout_gravity="left|center_vertical"
            android:textSize="20dip"
            android:layout_marginLeft="10dip"
            />
         <TextView
            android:id="@+id/movie_release_date"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="left|center_vertical"
            android:textSize="20dip"
            android:layout_marginLeft="10dip"
             />
           <LinearLayout
               android:layout_width="wrap_content"
               android:layout_height="match_parent"
               android:gravity="bottom"
               android:orientation="horizontal">

               <Button
                   android:id="@+id/editNotify"
                   android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:background="@android:color/transparent"
                   android:onClick="pressEditNotifyButton"
                   android:text="Notify"
                   android:textColor="@android:color/holo_blue_dark"
                   android:textStyle="bold" />

               <Button
                   android:id="@+id/iWatchItMovie"
                   android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:background="@android:color/transparent"
                   android:text="I watch it"
                   android:textColor="@android:color/holo_blue_dark"
                   android:textStyle="bold" />

               <Button
                   android:id="@+id/remove"
                   android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                   android:background="@android:color/transparent"
                   android:text="Remove"
                   android:textColor="@android:color/holo_blue_dark"
                   android:textStyle="bold" />


           </LinearLayout>
        </LinearLayout>


    </LinearLayout>
</FrameLayout>

编辑:

我已经解决了:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="350px">
    <!--android:layout_height="?android:attr/listPreferredItemHeight">-->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="2dp"
        android:layout_marginTop="4dp"
        android:layout_marginRight="2dp"
        android:layout_marginBottom="4dp"
        android:orientation="horizontal"
        android:background="@drawable/card_background">

        <ImageView
            android:id="@+id/poster"
            android:layout_width="185px"
            android:layout_height="277px"
            android:contentDescription="TODO"
            android:scaleType="centerCrop"
            android:src="@drawable/poster_placeholder" />
      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/movie_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left|center_vertical"
                android:layout_marginLeft="10dip"
                android:layout_weight="1"
                android:textSize="20dip"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/movie_release_date"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left|center_vertical"
                android:layout_marginLeft="10dip"
                android:layout_weight="1"
                android:textSize="20dip" />
        </LinearLayout>

          <LinearLayout
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:layout_weight="1"
              android:gravity="bottom"
              android:orientation="horizontal">

              <Button
                  android:id="@+id/editNotify"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:background="@android:color/transparent"
                  android:onClick="pressEditNotifyButton"
                  android:text="Notify"
                  android:textColor="@android:color/holo_blue_dark"
                  android:textStyle="bold" />

              <Button
                  android:id="@+id/iWatchItMovie"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:background="@android:color/transparent"
                  android:text="I watch it"
                  android:textColor="@android:color/holo_blue_dark"
                  android:textStyle="bold" />

              <Button
                  android:id="@+id/remove"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:background="@android:color/transparent"
                  android:text="Remove"
                  android:textColor="@android:color/holo_blue_dark"
                  android:textStyle="bold" />


          </LinearLayout>

        </LinearLayout>
      </LinearLayout>




</FrameLayout>

好的,@user47845(这是我的list_item_movie.xml)你可以试试改成这个然后告诉我们你过得怎么样。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="350px">
    <android.support.constraint.ConstraintLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/card_background">
        <ImageView
            android:id="@+id/poster"
            android:layout_width="120dp"
            android:layout_height="139dp"
            android:layout_marginEnd="10dp"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="10dp"
            android:layout_marginStart="2dp"
            android:contentDescription="TODO"
            android:scaleType="centerCrop"
            android:src="@drawable/poster_placeholder"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <TextView
            android:id="@+id/movie_title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dp"
            android:textSize="20dip"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/poster"
            app:layout_constraintTop_toTopOf="parent" />
        <TextView
            android:id="@+id/movie_release_date"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textSize="20dip"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/poster"
            app:layout_constraintTop_toBottomOf="@+id/movie_title" />
        <Button
            android:id="@+id/editNotify"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:onClick="pressEditNotifyButton"
            android:text="Notify"
            android:textColor="@android:color/holo_blue_dark"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toEndOf="@+id/poster" />
        <Button
            android:id="@+id/iWatchItMovie"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:text="I watch it"
            android:textColor="@android:color/holo_blue_dark"
            android:textStyle="bold"
            app:layout_constraintEnd_toStartOf="@+id/remove"
            app:layout_constraintStart_toEndOf="@+id/movie_title"
            app:layout_constraintBottom_toBottomOf="parent" />
        <Button
            android:id="@+id/remove"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="21dp"
            android:layout_marginRight="21dp"
            android:background="@android:color/transparent"
            android:text="Remove"
            android:textColor="@android:color/holo_blue_dark"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/iWatchItMovie" />
    </android.support.constraint.ConstraintLayout>
</FrameLayout>