【问题标题】:How to place multiple textviews in Array Adapter如何在数组适配器中放置多个文本视图
【发布时间】:2017-09-21 16:34:48
【问题描述】:

SearchAdapter.java

public class SearchFeedAdapter extends ArrayAdapter<String> {

    public int layout;
    public class ViewHolder2 {
        TextView pf_businessTitle;
        TextView pf_addressDistance;
        TextView pf_businessAddress;
        TextView pf_businessLocation;
        TextView pf_businessState;
        TextView pf_businessZipCode;
    }

    // MyEvents myEvents;
    public SearchFeedAdapter(Context context, int resource, List<String> objects) {
        super(context, resource, objects);
        layout=resource;
    }
    Context mContext;



    @Override
    public View getView(final int position, View convertView, final ViewGroup parent){

        SearchFeedAdapter.ViewHolder2 mainViewHolder=null;
        mContext = parent.getContext();

        LayoutInflater inflater=LayoutInflater.from(getContext());
        convertView= inflater.inflate(layout,parent,false );

        final SearchFeedAdapter.ViewHolder2 viewHolder=new SearchFeedAdapter.ViewHolder2();
        viewHolder.pf_businessTitle =(TextView)convertView.findViewById(R.id.pf_businessTitle);
        viewHolder.pf_addressDistance =(TextView)convertView.findViewById(R.id.pf_addressDistance);
        viewHolder.pf_businessAddress=(TextView)convertView.findViewById(R.id.pf_businessAddress);
        viewHolder.pf_businessLocation=(TextView)convertView.findViewById(R.id.pf_businessLocation);
        viewHolder.pf_businessState=(TextView)convertView.findViewById(R.id.pf_businessState);
        viewHolder.pf_businessZipCode=(TextView)convertView.findViewById(R.id.pf_businessZipCode);
        convertView.setTag(viewHolder);

        viewHolder.pf_businessTitle.setText(getItem(position));

        mainViewHolder=(SearchFeedAdapter.ViewHolder2)convertView.getTag();
       //  mainViewHolder.pf_businessTitle.setText(getItem(position));
       // String distance;
       // mainViewHolder.pf_addressDistance.setText(getItem(position));
        return convertView;


    }

}

SearchActivity.java

public class SearchFeedActivity extends AppCompatActivity{

    JSONObject jsonObject=new JSONObject();

    public static ArrayList<String> BusinessTitle = new ArrayList<String>();
    public static ArrayList<String> Distance = new ArrayList<String>();
    public static ArrayList<String> Address = new ArrayList<String>();
    public static ArrayList<String> Location=new ArrayList <String> ();
    public static ArrayList<String> State=new ArrayList<String>();
    public static ArrayList<String> ZipCode=new ArrayList<String>();


    public static ArrayAdapter<String> pfAdapter1;
    public static ArrayAdapter<String> pfAdapter2;
    public static ArrayAdapter<String> pfAdapter3;
    public static ArrayAdapter<String> pfAdapter4;
    public static ArrayAdapter<String> pfAdapter5;
    public static ArrayAdapter<String> pfAdapter6;
    ListView show;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_results);
        show= (ListView) findViewById(R.id.lv_pf);
        pfAdapter1 = new SearchFeedAdapter(SearchFeedActivity.this, R.layout.searchfeed_adapter,BusinessTitle);
        showData(pfAdapter1);



    }
    public void showData(ArrayAdapter<String> adapter){
        adapter.notifyDataSetChanged();
        show.setAdapter(adapter);
    }


}

我想将这些文本视图放在两行中。我想将该数据放在两个不同的行中并保持更新。我不关心这个 ArrayAdapter 如果您有任何替代品,请告诉我完成该任务的替代品。

【问题讨论】:

  • 要在 ListView 中托管更复杂的视图,您需要创建一个自定义适配器。自定义适配器将extendArrayAdapter,但添加了完全按照您的需要显示视图的功能。这是一个很好的教程:ezzylearning.com/tutorial/…

标签: android android-layout listview android-studio android-fragments


【解决方案1】:

公共类 SubtopicCustomAdapter 扩展 ArrayAdapter {

int count;
private Context mContext;
private ArrayList<SubTopicsModel> listState;
private SubtopicCustomAdapter myAdapter;
private boolean isFromView = false;



public SubtopicCustomAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull ArrayList<SubTopicsModel> objects) {
    super(context, resource, objects);
    this.mContext = context;
    this.listState = objects;
    this.myAdapter = this;
}




@Override
public View getDropDownView(int position, View convertView,
                            ViewGroup parent) {
    return getCustomView(position, convertView, parent);
}



@Override
public View getView(int position, View convertView, ViewGroup parent) {
    return getCustomView(position, convertView, parent);
}




public View getCustomView(final int position, View convertView,
                          ViewGroup parent) {

    listState.get(position).setExpert("0");
    final ViewHolder holder;
    if (convertView == null) {
        LayoutInflater layoutInflator = LayoutInflater.from(mContext);
        convertView = layoutInflator.inflate(R.layout.subtopic_spinner_adapter, null);
        holder = new ViewHolder();
        holder.mTextView = (TextView) convertView
                .findViewById(R.id.text);
        holder.mCheckBox = (CheckBox) convertView
                .findViewById(R.id.checkbox);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.mTextView.setText(listState.get(position).getTopic_name());




    return convertView;
}

private class ViewHolder {
    private TextView mTextView;
    private CheckBox mCheckBox;
}

}

您可以根据自己的需要创建自定义适配器,您只需创建布局并对其进行扩展。

【讨论】:

    【解决方案2】:

    首先你交换这两行

    adapter.notifyDataSetChanged();
    show.setAdapter(adapter);
    

    show.setAdapter(adapter);
    adapter.notifyDataSetChanged();
    

    你有多少个 ListView? 1 个列表视图只需要 1 个适配器。你有这么多的适配器。

    如果您想在适配器中显示许多数据,请使用 CustomModel。像这样

    public class MyModel {
    public String title;
    public String distance;
    public String address;
    public String location;
    public String state;
    public String zipCode;
    

    }

    还有你的 AdapterClass

    public class SearchFeedAdapter extends ArrayAdapter<MyModel> {
    
    public int layout;
    public class ViewHolder2 {
        TextView pf_businessTitle;
        TextView pf_addressDistance;
        TextView pf_businessAddress;
        TextView pf_businessLocation;
        TextView pf_businessState;
        TextView pf_businessZipCode;
    }
    
    // MyEvents myEvents;
    public SearchFeedAdapter(Context context, int resource, List<MyModel> objects) {
        super(context, resource, objects);
        layout=resource;
    }
    Context mContext;
    
    
    
    @Override
    public View getView(final int position, View convertView, final ViewGroup parent){
    
        SearchFeedAdapter.ViewHolder2 mainViewHolder=null;
        mContext = parent.getContext();
    
        LayoutInflater inflater=LayoutInflater.from(getContext());
        convertView= inflater.inflate(R.layout.your_layout_with_textviews,parent,false );
    
        final SearchFeedAdapter.ViewHolder2 viewHolder=new SearchFeedAdapter.ViewHolder2();
        viewHolder.pf_businessTitle =(TextView)convertView.findViewById(R.id.pf_businessTitle);
        viewHolder.pf_addressDistance =(TextView)convertView.findViewById(R.id.pf_addressDistance);
        viewHolder.pf_businessAddress=(TextView)convertView.findViewById(R.id.pf_businessAddress);
        viewHolder.pf_businessLocation=(TextView)convertView.findViewById(R.id.pf_businessLocation);
        viewHolder.pf_businessState=(TextView)convertView.findViewById(R.id.pf_businessState);
        viewHolder.pf_businessZipCode=(TextView)convertView.findViewById(R.id.pf_businessZipCode);
        convertView.setTag(viewHolder);
    
        viewHolder.pf_businessTitle.setText(getItem(position).title);
        viewHolder.pf_addressDistance.setText(getItem(position).distance);
        viewHolder.pf_businessAddress.setText(getItem(position).address);
        viewHolder.pf_businessLocation.setText(getItem(position).location);
        viewHolder.pf_businessState.setText(getItem(position).state);
        viewHolder.pf_businessZipCode.setText(getItem(position).zipCode);
    
        return convertView;
    }
    }
    

    你的活动是这样的

    public class SearchFeedActivity extends AppCompatActivity {
    
    JSONObject jsonObject=new JSONObject();
    
    public static ArrayList<MyModel> myModels = new ArrayList<MyModel>();
    
    
    
    public static ArrayAdapter<String> pfAdapter1;
    
    ListView show;
    
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_results);
        show= (ListView) findViewById(R.id.lv_pf);
        loadMyModels();
        pfAdapter1 = new SearchFeedAdapter(SearchFeedActivity.this, R.layout.searchfeed_adapter,myModels);
        showData(pfAdapter1);
    
    
    
    }
    
    private void loadMyModels() {
    
        //Load your data here. It`s dummy object creation
        for (int i=0;i<10;i++) {
            MyModel model = new MyModel();
            model.title = "title " + i;
            model.address = "address " + i;
            model.distance = "distance " + i;
            model.location = "location " + i;
            model.state = "state " + i;
            model.zipCode = "zipcode " + i;
            myModels.add(model);
        }
    }
    public void showData(ArrayAdapter<String> adapter){
        show.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
    }
    

    在未来最终使用 RecyclerView 代替 ListView

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 1970-01-01
      • 2015-11-24
      • 2016-12-31
      • 2022-01-05
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多