![](/img/trans.png)
[英]ViewRootImpl: ViewPostImeInputStage processPointer 0 on OnItemClick of Listview in android
[英]“ViewPostImeInputStage processPointer 0” in log when item in RecyclerView is tapped?
在我正在創建的應用中,我有一個項目列表。 當用戶點擊這些項目之一時,應該會打開一個新窗口,顯示用戶點擊的項目內的信息。 這是我的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
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);
}
}
由於某種原因,當我點擊其中一項時,什么也沒有發生,並且日志顯示
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
這是什么意思? 我該如何解決? 謝謝!
您沒有在RecyclerView on touch事件上調用活動。
經過更正的代碼是:
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.