片段在Android中相互影响,如何预防?

时间:2017-05-22 11:22:06

标签: android android-edittext fragment

我在Android中使用了1个Activity和4个TabFragment。当我使用EditText在第二个TabFragment中添加一个keylistener时,我的第一个TabFragment打开了键盘。我控制了2 xml_layout彼此不同。

所以任何想法为什么碎片会相互影响以及如何防止这种情况? 。你有没有人面对这个问题?

tab_fragment_detailcomment.xml

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

<LinearLayout
    android:layout_marginTop="10dp"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/profile_picture"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginStart="15dp"/>

    <TextView
        android:id="@+id/name_surname"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginStart="15dp" />

</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/comment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="80dp" />

</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginStart="80dp">

    <ImageView
        android:id="@+id/starIcon"
        android:layout_width="20dp"
        android:layout_height="20dp" />
    <TextView
        android:id="@+id/starCount"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginStart="15dp" />

</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginStart="80dp">

  <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="40dp"
        android:background="@drawable/comment_box"
        android:hint="Add Commment"
        android:paddingLeft="10dp"
        android:inputType="textVisiblePassword">

        <requestFocus />

    </EditText> 

</LinearLayout>

TabFragment_DetailComment.java

public class TabFragment_DetailComment extends Fragment {

@BindView(R.id.profile_picture)
ImageView profile_picture;
@BindView(R.id.name_surname)
TextView name_surname;
@BindView(R.id.comment)
TextView comment;
@BindView(R.id.starIcon)
ImageView starIcon;
@BindView(R.id.starCount)
TextView starCount;
@BindView(R.id.editText)
EditText editText;

int feedId;
List<FeedComment> feedComment;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, ` 
`Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.tab_fragment_detailcomment, container, false);
    ButterKnife.bind(this,view);

    feedId = ((FeedDetailActivity) getActivity()).getFeedId();

    addKeyListener();

    ServiceController service = new ServiceController();

    Call<ResponseFeedComment> call = service.getFeedServiceCallInterface().getFeedComment(feedId);

    call.enqueue(new Callback<ResponseFeedComment>() {
        @Override
        public void onResponse(Call<ResponseFeedComment> call, Response<ResponseFeedComment> response) {
            if (response != null) {
                feedComment = response.body().getData();

                profile_picture.setImageResource(R.drawable.male);

                    for(int i=0; i < feedComment.size(); i++) {

                        name_surname.setText(feedComment.get(i).getDisplayToken());
                        comment.setText(feedComment.get(i).getBody());
                        starIcon.setImageResource(R.drawable.star);
                        starCount.setText(feedComment.get(i).getLikeCount().toString());

                    }

            }else {
                Log.v("Response", "NULL");
            }
        }

        @Override
        public void onFailure(Call<ResponseFeedComment> call, Throwable t) {

        }
    });



    return view;
}

public void addKeyListener() {

    // add a keylistener to keep track user input
    editText.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            // if keydown and "enter" is pressed
            if ((event.getAction() == KeyEvent.ACTION_DOWN)
                    && (keyCode == KeyEvent.KEYCODE_ENTER)) {

                // display a floating message
                Toast.makeText(getContext(),
                        editText.getText(), Toast.LENGTH_LONG).show();
                return true;

            } else if ((event.getAction() == KeyEvent.ACTION_DOWN)
                    && (keyCode == KeyEvent.KEYCODE_9)) {

                // display a floating message
                Toast.makeText(getContext(),
                        "Number 9 is pressed!", Toast.LENGTH_LONG).show();
                return true;
            }

            return false;
        }
    });
}
}

FeedDetailActivity.java

公共类FeedDetailActivity扩展了AppCompatActivity {

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

String nameSurname;
int feedId;

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

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

    // getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    nameSurname = getIntent().getStringExtra("nameSurname");

    Intent i = getIntent();
    feedId = i.getIntExtra("feedId",0); // 20  for default value
   // feedId = getIntent().getStringExtra("feedId"); // Hata burda


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

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

}
public String getNameSurname() {
    return nameSurname;
}

public int getFeedId() {
    return feedId;
}

private void setupViewPager(ViewPager viewPager) {
    FeedDetailActivity.ViewPagerAdapter adapter = new FeedDetailActivity.ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new TabFragment_DetailFeed(), "DETAIL");
    adapter.addFragment(new TabFragment_DetailComment(), "COMMENT");
    adapter.addFragment(new TabFragment_DetailImage(), "IMAGE");
    adapter.addFragment(new TabFragment_DetailSurvey(), "SURVEY");
    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);
    }
}

}

1 个答案:

答案 0 :(得分:0)

试试这个

设置android:clickable="true"并将背景设置为每个片段xml的父布局。