Also habe ich eine Liste von Zuständen in meinem RecyclerView und das funktioniert. Aber ich möchte auf der linken Seite des Textes ein Bild aus meinem Assets-Ordner hinzufügen, das auf der gleichen Ebene wie der Res-Ordner ist, kein Unterordner, und das funktioniert nicht.Bild im RecyclerView von Adapter
Meine Layout-Datei lautet wie folgt:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dp"
android:paddingTop="5dp">
<ImageView
android:id="@+id/state_Icon_View"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/state_Item"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:layout_toEndOf="@+id/state_Icon_View"
android:layout_toRightOf="@+id/state_Icon_View"
android:text="The State"
android:textColor="#000000"
android:textSize="24sp"
tools:ignore="HardcodedText" />
Hier ist meine Daten-Provider:
import android.widget.ImageView;
public class StateDataProvider
{
private String state;
private ImageView image;
public StateDataProvider(String state)
{this.setState(state);}
public StateDataProvider(ImageView image)
{this.setImage(image);}
public String getState() {
return state;
}
public ImageView getImage() {
return image;
}
public void setState(String state)
{
this.state = state;
}
public void setImage(ImageView image)
{
this.image = image;
}
}
Und schließlich ist hier mein Adapter:
public class StateRecyclerAdapter extends RecyclerView.Adapter <StateRecyclerAdapter.RecyclerViewHolder> {
private ArrayList<StateDataProvider> arrayList = new ArrayList<StateDataProvider>();
private Context context;
public StateRecyclerAdapter(Context context, ArrayList<StateDataProvider> arrayList)
{
this.arrayList = arrayList;
this.context = context;
}
private String theStateIcon;
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.state_layout,parent,false);
RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view);
return recyclerViewHolder;
}
@Override
public void onBindViewHolder(StateRecyclerAdapter.RecyclerViewHolder holder, int position) {
StateDataProvider data_provider = arrayList.get(position);
holder.state.setText(data_provider.getState());
String whichState = data_provider.getState();
switch (whichState) {
case "New South Wales":
theStateIcon = "NSW_icon.png";
case "Victoria":
theStateIcon = "VIC_icon.png";
case "Queensland":
theStateIcon = "QLD_icon.png";
case "Tasmania":
theStateIcon = "TAS_icon.png";
case "South Australia":
theStateIcon = "SA_icon.png";
case "Northern Territory":
theStateIcon = "NT_icon.png";
case "Western Australia":
theStateIcon = "WA_icon.png";
}
int resourceId = context.getResources().getIdentifier(theStateIcon, "assets", "au.com.itmobilesupport.sqltwo");
holder.state_Icon.setImageDrawable(ContextCompat.getDrawable(context,resourceId));
}
@Override
public int getItemCount() {
return arrayList.size();
}
public static class RecyclerViewHolder extends RecyclerView.ViewHolder
{
TextView state;
ImageView state_Icon;
public RecyclerViewHolder(View view) {
super(view);
state = (TextView)view.findViewById(R.id.state_Item);
state_Icon = (ImageView) view.findViewById(R.id.state_Icon_View);
}
}
}
Also ich versuche, um den Kontext zu bekommen und dann das Bild für die Bildansicht zu setzen, aber wenn ich versuche den Kontext zu bekommen, bekomme ich folgendes wegen Fehler:
Error:(48, 19) error: constructor StateRecyclerAdapter in class
StateRecyclerAdapter cannot be applied to given types;
required: Context,ArrayList<StateDataProvider>
found: ArrayList<StateDataProvider>
reason: actual and formal argument lists differ in length
EDIT: Hier ist mein StatePage.java
public class StatePage extends AppCompatActivity {
private Cursor reefs;
private MyDatabase db;
private String chosenState;
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager layoutManager;
ArrayList<StateDataProvider> arrayList = new
ArrayList<StateDataProvider>();
StateDataProvider dataprovider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_state_page);
db = new MyDatabase(this);
reefs = db.getStateData();
do{
dataprovider = new StateDataProvider(reefs.getString(1));
arrayList.add(dataprovider);
} while (reefs.moveToNext());
recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
adapter = new StateRecyclerAdapter(arrayList);
recyclerView.setAdapter(adapter);
recyclerView.addOnItemTouchListener(
new MyRecyclerViewClickListener(this, new
MyRecyclerViewClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
chosenState = arrayList.get(position).getState();
goToRegionPage();
// System.out.println("State is" +
arrayList.get(position).getState());
}
})
);
}
public void goToRegionPage()
{
Intent intent = new Intent(this, RegionPage.class);
intent.putExtra("theState", chosenState);
startActivity(intent);
}
}
Können Sie Ihre Aktivität/Fragment Codes schreiben, wo Sie diese StateRecyclerAdapter verwenden. Der Fehler ist nicht auf das Festlegen des Bildproblems zurückzuführen. –
Included StartPage.java Ermittelt die Daten aus einer SQL-Datenbank, die beim Start importiert wird. Es funktioniert alles, aber ich möchte nur die App um ein Bild zu verbessern und das ist, wo ich festgefahren bin. – timv
Danke Quang, ich bekomme einen Fehler bei Adapter = new StateRecyclerAdapter (arrayList); Ich muss auch den Kontext angeben, bin mir aber nicht sicher, wie das geht. Und ja, ich bin ein Neuling, tut mir leid, wenn es eine dumme Frage ist. – timv