【问题标题】:Listview is setting text only for first positionListview 仅为第一个位置设置文本
【发布时间】:2020-03-02 07:08:58
【问题描述】:

Listview 仅在第一个位置设置文件名。即使单击列表视图的任何位置,它也仅将文件名设置为第一个位置。请让我知道我需要进行哪些更改,以便仅在单击的项目上正确设置文件名,而不是始终在第一个项目上正确设置文件名。提前致谢。

【问题讨论】:

  • 尝试在 onClick 方法中记录您的职位编号
  • ivDocument.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.d("**Postion", "Postion: "+position); (( DocumentActivity ) context).Document(position); // tvDocName.setText(s); } });
  • onActivityResult 你得到相同的位置了吗??
  • 如果我没记错的话,您希望列表视图中的文档路径位于该位置吗??
  • 如果是,那么你可以做 Survey_vehiclepojo selected=mylist.get(position); selected.setPath(路径); adapter.notifyDataSetChanged();

标签: android android-listview


【解决方案1】:

我在回收视图中做了同样的事情我正在与你分享我的项目代码

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

}

这是适配器

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

我的文件正在选择看这个截图

【讨论】:

  • 不,它甚至没有设置文件名
  • 你能准确告诉我你希望文件文本显示还是图像文件?
  • 我只想显示文件名而不是图像。
  • 即使对我来说,它会在我调试时显示,但它不会出现在显示中。我也会发布 layout_activity,请稍等。
  • 在该列表的文本视图中。 (每个项目)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多