Search code examples
androidandroid-listview

Listview is setting text only for first position


Listview is setting the filename only in first position. Even though on clicking any positions of the listview it sets the filename for the first position only. Please let me know what changes i need to make so that filename will be set properly on clicked item only instead of first item always. Thanks in advance.


Solution

  • I have done same with in Recycle view I am sharing my project code with you

    package com.deepak.myapplication;
    
    public class DocumentActivity extends AppCompatActivity implements 
    View.OnClickListener {
    ImageView toolbar_back;
    TextView next, tvDocName;
    RecyclerView listView;
    ArrayList<Survey_vehiclepojo> mylist = new ArrayList();
    My_document_adapter adapter;
    private int position;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        //toolbar_back = ( ImageView ) findViewById(R.id.toolbar_back);
        //toolbar_back.setOnClickListener(this);
    
        //next = ( TextView ) findViewById(R.id.next);
        //next.setOnClickListener(this);
    
        listView = findViewById(R.id.recycleView);
    
        mylist.add(new Survey_vehiclepojo("Pay Slip", "file1"));
        mylist.add(new Survey_vehiclepojo("Insurance", "file2"));
        mylist.add(new Survey_vehiclepojo("NA Certificate", "file3"));
        mylist.add(new Survey_vehiclepojo("NA 1", "file3"));
        mylist.add(new Survey_vehiclepojo("NA 2", "file3"));
        mylist.add(new Survey_vehiclepojo("NA 3", "file3"));
        listView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new My_document_adapter(mylist, DocumentActivity.this);
        listView.setAdapter(adapter);
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        /*case R.id.toolbar_back:
        finish();
        break;
        case R.id.next:
        Intent n=new Intent(DocumentActivity.this, Loan_checklistActivity.class);
        startActivity(n);
        break;
        }*/
        }
    }
    
    public void Document(int pos) {
        position = pos;
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("*/*");
        startActivityForResult(intent, position);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        selectedFile(data, requestCode);
    }
    
    private void selectedFile(Intent data, int position) {
        String displayName = null;
        if (data != null) {
            Uri uri = data.getData();
            String uriString = null;
    
            if (uri != null) {
                uriString = uri.toString();
            }
            File myFile = new File(uriString);
            String path = myFile.getAbsolutePath();
    
            if (uriString != null) {
                if (uriString.startsWith("content://")) {
                    try (Cursor cursor = DocumentActivity.this.getContentResolver().query(uri, null, null, null, null)) {
                        if (cursor != null && cursor.moveToFirst()) {
                            displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                            tvDocName = findViewById(R.id.tvDocName);
                            Survey_vehiclepojo selected = mylist.get(position);
                            selected.setFile1(displayName);
    
                            //My_document_adapter.display(displayName,position);
                            adapter.notifyDataSetChanged();
                        }
                    }
                }
            } else if (uriString.startsWith("file://")) {
                displayName = myFile.getName();
                tvDocName = findViewById(R.id.tvDocName);
                Survey_vehiclepojo selected = mylist.get(position);
                selected.setFile1(displayName);
                //My_document_adapter.display(displayName,position);
                adapter.notifyDataSetChanged();
            }
        }
    }
    

    }

    This is Adapter

    class My_document_adapter extends 
    RecyclerView.Adapter<My_document_adapter.ViewHolder>{
    ArrayList<Survey_vehiclepojo> mylist;
    DocumentActivity documentActivity;
    
    public My_document_adapter(ArrayList<Survey_vehiclepojo> mylist, 
    DocumentActivity documentActivity) {
        this.mylist = mylist;
        this.documentActivity = documentActivity;
    }
    
    @NonNull
    @Override
    public My_document_adapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup 
    parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item, parent, false);
        return new My_document_adapter.ViewHolder(itemView);
    }
    
    @Override
    public void onBindViewHolder(@NonNull My_document_adapter.ViewHolder holder, 
    final int position) {
    
        holder.name.setText("name"+position);
        holder.ivDocument.setOnClickListener(new View.OnClickListener() { 
       @Override public void onClick(View view) {
            Log.d("**Postion", "Postion: "+position);
            documentActivity.Document(position);
    
        } });
    }
    
    @Override
    public int getItemCount() {
        return mylist.size();
    }
    
    
    public class ViewHolder extends RecyclerView.ViewHolder {
    
        final TextView tvDocName,name;
        ImageView ivDocument;
    
    
        public ViewHolder(@NonNull View view) {
            super(view);
            name = view.findViewById(R.id.tvName);
    
    
            tvDocName = view.findViewById(R.id.tvDocName);
    
            ivDocument = view.findViewById(R.id.ivDocument);
        }
      }
     }
    

    and my file is selecting see this screenshotenter image description here