[英]“ViewPostImeInputStage processPointer 0” in log when item in RecyclerView is tapped?
In my app I am creating, I have a list of items. 在我正在创建的应用中,我有一个项目列表。 When a user taps on one of these items, a new window is supposed to open, displaying the information inside the item that the user tapped on. 当用户点击这些项目之一时,应该会打开一个新窗口,显示用户点击的项目内的信息。 Here is my java code for that- 这是我的Java代码-
NoteListFragment.java NoteListFragment.java
public class NoteListFragment extends Fragment {
private FloatingActionButton mFab;
private View mRootView;
private List<Note> mNotes;
private RecyclerView mRecyclerView;
private NoteListAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
public NoteListFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment and hold the reference
//in mRootView
mRootView = inflater.inflate(R.layout.fragment_note_list, container, false);
//Get a programmatic reference to the Floating Action Button
mFab = (FloatingActionButton)mRootView.findViewById(R.id.fab);
//attach an onClick listener to the Floating Action Button
mFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), NoteEditorActivity.class));
}
});
setupList();
return mRootView;
}
private void setupList() {
mRecyclerView = (RecyclerView) mRootView.findViewById(R.id.note_recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
final GestureDetector mGestureDetector =
new GestureDetector(getActivity(), new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
View child = recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY());
if (child != null && mGestureDetector.onTouchEvent(motionEvent)) {
int position = recyclerView.getChildLayoutPosition(child);
Note selectedNote = mNotes.get(position);
Intent editorIntent = new Intent(getActivity(), NoteEditorActivity.class);
editorIntent.putExtra("id", selectedNote.getId());
}
System.out.print("Failed to load Editor class.");
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
mAdapter = new NoteListAdapter(mNotes, getActivity());
mRecyclerView.setAdapter(mAdapter);
mNotes = NoteManager.newInstance(getActivity()).getAllNotes();
}
}
NoteEditorActivity.java NoteEditorActivity.java
public class NoteEditorActivity extends AppCompatActivity {
private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_note_editor);
mToolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //remove this line in the MainActivity.java
if (savedInstanceState == null){
Bundle args = getIntent().getExtras();
if (args != null && args.containsKey("id")){
long id = args.getLong("id", 0);
if (id > 0){
openFragment(NotePlainEditorFragment.newInstance(id), "Editor");
}
}
openFragment(NotePlainEditorFragment.newInstance(0), "Editor");
}
}
@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_note_editor, 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);
}
private void openFragment(final Fragment fragment, String title){
getSupportFragmentManager()
.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.container, fragment)
.addToBackStack(null)
.commit();
getSupportActionBar().setTitle(title);
}
}
For some reason, when I tap one of the items, nothing happens, and the log says 由于某种原因,当我点击其中一项时,什么也没有发生,并且日志显示
11-26 09:45:17.963 12963-12963/com.example.simplenotepad D/ViewRootImpl: ViewPostImeInputStage processPointer 0
11-26 09:45:18.073 12963-12963/com.example.simplenotepad D/ViewRootImpl: ViewPostImeInputStage processPointer 1
What does this mean? 这是什么意思? How do I fix this? 我该如何解决? Thanks! 谢谢!
You are not calling the activity in the RecyclerView on touch event. 您没有在RecyclerView on touch事件上调用活动。
The code with the correction is: 经过更正的代码是:
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
View child = recyclerView.findChildViewUnder(motionEvent.getX(), motionEvent.getY());
if (child != null && mGestureDetector.onTouchEvent(motionEvent)) {
int position = recyclerView.getChildLayoutPosition(child);
Note selectedNote = mNotes.get(position);
Intent editorIntent = new Intent(getActivity(), NoteEditorActivity.class);
editorIntent.putExtra("id", selectedNote.getId());
startActivity(editorIntent);
}
System.out.print("Failed to load Editor class.");
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.