代码之家  ›  专栏  ›  技术社区  ›  Ambreen Khan

OnClick将错误的位置和数据返回到listvew上的筛选文本

  •  1
  • Ambreen Khan  · 技术社区  · 6 年前

    可敬的大师 下面的代码通过单击 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;
    
    }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Omkar    6 年前

    尝试 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);
        }
    });
    

    更新

    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();
            }