Ich arbeite an einer einfachen Anwendung, die die Shows verfolgt, die ich gerade sehe, zuerst benutzte ich einen ListView, aber jetzt möchte ich einen RecyclerView verwenden. Ich speichere alle Shows in einer lokalen Datenbank. Ich habe jedoch Probleme, meinen Code korrekt in einen RecyclerView umzuwandeln. Ich kann es noch nicht testen, weil ich mit dem Fehler in der folgenden Zeile am kämpfen:Von ListView zu RecyclerView
showAdapter = new ArrayAdapter<Show>(this, showArrayAdapter); // the error
Error:(62, 56) error: incompatible types: List cannot be converted to int
public class MainActivity extends AppCompatActivity {
private Button btn;
private RecyclerView recyclerView;
private List<Show> showArrayAdapter;
private ShowsAdapter showAdapter;
private DataSource datasource;
List<Show> shows = datasource.getAllShows();
public static final String INTENT_DETAIL_ROW_NUMBER = "Row number";
public static final String INTENT_DETAIL_REMINDER_TEXT = "Reminder text";
public static final int REQUESTCODE = 2;
public static final String EXTRA_SHOW_ID = "extraShowId";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
datasource = new DataSource(this);
shows = datasource.getAllShows();
recyclerView = (RecyclerView) findViewById(R.id.main_list);
showArrayAdapter = new ArrayList<Show>();
recyclerView.setAdapter(showAdapter);
registerForContextMenu(recyclerView);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.taskView);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivityForResult(new Intent(MainActivity.this, CreateShowActivity.class), 1);
}
});
}
private void updateUI() {
if (showAdapter == null) {
showAdapter = new ArrayAdapter<Show>(this, showArrayAdapter); // the error
recyclerView.setAdapter(showAdapter);
} else {
showAdapter.notifyDataSetChanged();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
//Handle data
long showId = data.getLongExtra(EXTRA_SHOW_ID, -1);
if (showId != -1) {
Show show = datasource.getShow(showId);
showArrayAdapter.add(show);
updateUI();
}
}
}
if (requestCode == 2) {
if (resultCode == RESULT_OK) {
updateUI();
}
}
}
}
Mein Adapter
public class ShowsAdapter extends RecyclerView.Adapter<ShowsAdapter.ViewHolder> {
private ArrayAdapter<Show> mShows;
private Context mContext;
public ShowsAdapter(Context mContext, ArrayAdapter<Show> mShows) {
this.mContext = mContext;
this.mShows = mShows;
}
@Override
public ShowsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(android.R.layout.activity_list_item, null);
// Return a new holder instance
ShowsAdapter.ViewHolder viewHolder = new ShowsAdapter.ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(ShowsAdapter.ViewHolder holder, final int position) {
final Show show = mShows.getItem(position);
holder.textView.setText(show.getShow());
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext, EditShowActivity.class);
intent.putExtra(INTENT_DETAIL_ROW_NUMBER, position);
intent.putExtra(INTENT_DETAIL_REMINDER_TEXT, show.getShow());
((MainActivity) mContext).startActivityForResult(intent, REQUESTCODE);
}
});
holder.mView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
mShows.remove(mShows.getItem(position));
notifyItemRemoved(position);
notifyItemRangeChanged(position,mShows.getCount());
return true;
}
});
}
@Override
public int getItemCount() {
return mShows.getCount();
}
public static class ViewHolder extends RecyclerView.ViewHolder{
public View mView;
public TextView textView;
//Constructor
public ViewHolder(View v) {
super(v);
textView = (TextView) v.findViewById(android.R.id.text1);
mView = v;
}
}
}
Da ich zur Zeit mit dieser habe Schwierigkeiten und versuchte, Es kann viele verschiedene Dinge geben, dass mein Code nicht funktioniert. wenn Sie etwas anderes sehen lassen Sie mich wissen
UPDATE:
änderte ich viel auf der Grundlage der Eingabe von allen erhalten:
private DataSource datasource;
private Button btn;
private RecyclerView recyclerView;
private List<Show> shows;
private ShowsAdapter showAdapter;
hinzugefügt, um die Layout-Manager und entfernt Datenquelle, bevor die Initialisierung
DataSource datasource = new DataSource(this);
List<Show> shows = datasource.getAllShows();
recyclerView = (RecyclerView) findViewById(R.id.main_list);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setAdapter(showAdapter);
Aktualisiert meine UpdateUI()
private void updateUI() {
if (showAdapter == null) {
showAdapter = new ShowsAdapter(this, shows); // the error
recyclerView.setAdapter(showAdapter);
} else {
showAdapter.notifyDataSetChanged();
}
}
und abgestimmt werden die Typen in showAdapters.java
public ShowsAdapter(Context mContext, List<Show> mShows) {
this.mContext = mContext;
this.mShows = mShows;
}
jedoch auf Start I
E/RecyclerView: No adapter attached; skipping layout E/RecyclerView: No adapter attached; skipping layout
und
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.kevin.androidapp/com.example.kevin.androidapp.MainActivity}: java.lang.NullPointerException
Caused by: java.lang.NullPointerException at com.example.kevin.androidapp.MainActivity.onActivityResult(MainActivity.java:77)
, die in der onActivityResult ist Show show = datasource.getShow(showId);
die folgenden Fehler bekommen My createShowActivity
public class CreateShowActivity extends AppCompatActivity {
private Button btn;
private EditText showDescription;
private DataSource datasource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
showDescription = (EditText)this.findViewById(R.id.showDescription);
datasource = new DataSource(this);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.createButton);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
long assignmentId = datasource.createShows(showDescription.getText().toString());
Intent resultIntent = new Intent();
resultIntent.putExtra(MainActivity.EXTRA_SHOW_ID, assignmentId);
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
Unklare entsprechen, welche Linie, die sie bezieht ... Auch , wer hat gesagt, dass du eine Recyclerview benötigst? Sie können das ViewHolder-Muster in einem ListView verwenden –
Und "List shows = datasource.getAllShows();" sieht so aus, als würde es eine Null-Null-Erkennung auslösen, also würde der Code unabhängig vom Kompilierungsfehler nicht ausgeführt werden –
nicht sicher, dass du den ArrayAdapter neu gesetzt hast (this, showArrayAdapter); umAdapter anzuzeigen. Sieht so aus, als wäre das Problem, eine ShowAdapter-Instanz zu erstellen und es zu versuchen? –
Raghavendra