2016-07-19 56 views
0

imagview我想:https://www.learn2crack.com/2016/02/recyclerview-json-parsing.htmlAndroid的改造2解析用的TextView

它的工作,假設我需要證明與textview一起imageview。如何加載圖像視圖:

package com.retro; 

public class Android{ 

public String getFirstname() { 
    return firstname; 
} 

public void setFirstname(String firstname) { 
    this.firstname = firstname; 
} 

public String getLastname() { 
    return lastname; 
} 

public void setLastname(String lastname) { 
    this.lastname = lastname; 
} 

private String firstname; 
private String lastname; 
public String getImage() { 
    return image; 
} 
public void setImage(String image) { 
    image = image; 
} 
private String image; 
} 

這裏是我的適配器類別:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { 
private ArrayList<Android> names; 

public DataAdapter(ArrayList<Android> first) { 
    this.names = first; 

} 
@Override 
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, viewGroup, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) { 

    viewHolder.song_title.setText(names.get(i).getFirstname()); 
    viewHolder.song_year.setText(names.get(i).getLastname()); 


} 

@Override 
public int getItemCount() { 
    return names.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder{ 
    public TextView song_title, song_year, song_author; 
    public ImageView Image; 

    public ViewHolder(View view) { 
     super(view); 
     song_title = (TextView) view.findViewById(R.id.first_name); 
     song_year = (TextView) view.findViewById(R.id.last_name); 
     Image=(ImageView) view.findViewById(R.id.img_android); 
    } 
} 
} 

JSON響應:

public class JSONResponse { 
private Android[] users; 

public Android[] getNames() { 
    return users; 
} 
} 

請求接口:

public interface RequestInterface { 
@GET("sampleJson.php") 
Call<JSONResponse> getJSON(); 
} 

這裏是我的主活動:

public class MainActivity extends AppCompatActivity { 

private RecyclerView recyclerView; 
private ArrayList<Android> data; 
private DataAdapter adapter; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    initViews(); 
} 
private void initViews(){ 
    recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view); 
    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); 
    recyclerView.setLayoutManager(layoutManager); 
    loadJSON(); 
} 
private void loadJSON(){ 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl("URRRRRRRRRRRLLLLL") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    RequestInterface request = retrofit.create(RequestInterface.class); 
    Call<JSONResponse> call = request.getJSON(); 
    call.enqueue(new Callback<JSONResponse>() { 
     @Override 
     public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 
      JSONResponse jsonResponse = response.body(); 
      data = new ArrayList<>(Arrays.asList(jsonResponse.getNames())); 
      adapter = new DataAdapter(data); 
      recyclerView.setAdapter(adapter); 
     } 

     @Override 
     public void onFailure(Call<JSONResponse> call, Throwable t) { 
      Log.d("Error",t.getMessage()); 
     } 
    }); 
} 
} 

這裏是我的row_layout:

<android.support.v7.widget.CardView 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_marginTop="5dp" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp" 
card_view:cardCornerRadius="5dp"> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:orientation="horizontal"> 
    <ImageView 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:id="@+id/img_android" 
    android:src="@drawable/ic_launcher" 
    /> 
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="10dip" 
    android:layout_gravity="center" 
    android:orientation="vertical"> 
    <TextView 
    android:id="@+id/first_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Text" 
    android:textColor="#000" /> 
<TextView 
    android:id="@+id/last_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Text" 
    android:textColor="#000" /> 
</LinearLayout> 

主要佈局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.retro.MainActivity"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/card_recycler_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="vertical" /> 

我試着用畢加索:不知道,但ImageView的不加載 Picasso.with(context).load(android_versions.get(i).getAndroid_image_url())。resize(120,60).into(viewHolder.img_android);

任何想法傢伙...請讓我知道

回答

1

你不能把你的ImageView內的文本視圖裏面,你在你的row_layout做了什麼。而不是你把它們放在LinearLayoutRelativeLayout之內。

而在適配器類的ViewHolder中,應首先聲明ImageView。

0

您可以使用畢加索加載圖像。在您的搖籃compile'com.squareup.picasso:picasso:2.3.2' 添加此行庫下載到你的項目,或者你可以看到他們的官方文檔here

,你可以修改代碼:

@Override 
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) { 

     viewHolder.song_title.setText(names.get(i).getFirstname()); 
     viewHolder.song_year.setText(names.get(i).getLastname()); 
     Picasso.with(context).load(names.get(i) 
       .getImage()) 
       .resize(250,200) //to resize Image 
       .into(viewHolder.Image); 


    } 

這是我的項目

工作正常