android - OnClick 将错误的位置和数据返回到 listvew 上的过滤文本
问题描述
可敬的 Gurus Bellow 代码通过单击列表视图过滤的项目返回错误的位置和数据ArrayAdapter
,任何建议都将受到高度赞赏。
Listview
可以通过 setOnItemClickListener 上的波纹管代码轻松完美地过滤它返回错误的位置。任何建议都将受到高度赞赏。
public class MyActivity extends AppCompatActivity {
---------Variables------
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_main);
Intent i = getIntent();
name2=i.getStringExtra("chiled");
postion = i.getIntExtra("id",0);
chiled= i.getStringExtra("name").replace(" ", "_");
//-------------------------Action Bar-------
ActionBar mActionBar = getSupportActionBar();
if (mActionBar != null) {
----Action BarCode---------
}
adapter = new ArrayAdapter<String>(MyActivity.this,
R.layout.listview_item,R.id.text);
//################# FireBaseStarts
mProgressDialog = new ProgressDialog(MyActivity.this);
mProgressDialog.setTitle("Loading List...");
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
FirebaseDatabase database = FirebaseDatabase.getInstance();
myRef = database.getReference(chiled);
listview = (ListView) findViewById(R.id.listview);
queryRef = myRef.orderByChild("order");
queryRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long b = dataSnapshot.getChildrenCount();
imageUrls = new String[(int) b];
int i = 0;
for (DataSnapshot ddataSnapshot : dataSnapshot.getChildren()) {
Object value = ddataSnapshot.getValue();
adapter.add(((Map) value).get("name").toString());
imageUrls[i] = ((Map) value).get("url").toString();
i++;
}
listview.setAdapter(adapter);
mProgressDialog.dismiss();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("Database Error is: ", "loadPost:onCancelled", databaseError.toException());
Toast.makeText(MyActivity.this, "Failed to load post.",
Toast.LENGTH_SHORT).show();
}
});
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent i = new Intent(MyActivity.this,
SecondActivity.class);
i.putExtra("name", adapter.getItem(position));
i.putExtra("id", position);
startActivity(i);
}
});
}
//---------------Search Starts
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu,menu);
final MenuItem item=menu.findItem(R.id.inputSearch);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setQueryHint("Search Naghma...");
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
// listview.setAdapter(adapter);
return true;
}
}
解决方案
尝试adapterView.getItemAtPosition(position).toString().trim();
如下
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String name = parent.getItemAtPosition(position).toString().trim();
Intent i = new Intent(MyActivity.this,
SecondActivity.class);
i.putExtra("name", name);
i.putExtra("id", position);
startActivity(i);
}
});
更新
onChange 调用 dataAdapterName.notifyDataSetChanged();
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long b = dataSnapshot.getChildrenCount();
imageUrls = new String[(int) b];
int i = 0;
for (DataSnapshot ddataSnapshot : dataSnapshot.getChildren()) {
Object value = ddataSnapshot.getValue();
adapter.add(((Map) value).get("name").toString());
imageUrls[i] = ((Map) value).get("url").toString();
i++;
}
listview.setAdapter(adapter);
adapter.notifyDataSetChanged(); // change here
mProgressDialog.dismiss();
}
推荐阅读
- flutter - 如何从同时悬停的多个小部件中获取信息?
- python - 查询集外键模型
- php - 如何使嵌入 iframe 的 YouTube 播放器正常工作而不阻止 Chrome 中的页面加载?
- c# - 为什么在包含 foreach 循环之后我得到了?
- react-native - 使用新坐标更新 react-native-map
- linux - dpkg“处理触发器时发现循环”libc-bin
- ios - 调整启动屏幕故事板以启动具有固定大小的图像
- java - 当数字达到小数点后 3 位时如何停止 while 循环?
- c++ - 现代 C++ - 如何使用 std::optional 和引用实现 FirstOrDefault
- python-3.x - (1045,“用户'root'@'ip-address'的访问被拒绝(使用密码:YES)”)在python