public interface WeatherDataView{
void showWeatherData(WeatherData data);
}
public class WeatherActivity extends AppCompatActivity implements WeatherDataView{
private WeatherPresenter presenter;
....
public void onCreate(){
...
presenter.loadWeatherData();
...
}
public void showWeatherData(WeatherData data){
....
}
}
public class WeatherPresenter {
private Repository repository;
private WeatherDataView view;
...
public void loadWeatherData(){
WeatherData data = repository.fetchWeatherData();
view.showWeatherData(data);
}
}
//это в слое Model
public class Repository{
public WeatherData fetchWeatherData(){
return api.fetchWeatherData();
}
}
Я не получил ссылку ни на внешний класс, не на класс родитель.
class C extends B{
class D {
public void method(){
System.out.println(C.this.toString()); // C.this - ссылка на внешний класс, т.е. на C
System.out.println(super.toString()); // super или D.super - ссылка на родительский класс,
// т.е. на Object, т.к. по умолчанию все классы наследуются от Object
}
@Override
public String toString() {
return "D";
}
}
@Override
public String toString() {
return "C";
}
}
public class SpinnerAdapter extends BaseAdapter {
private List<String> items;
private LayoutInflater inflater;
private ItemClickListener clickListener;
public SpinnerAdapter(Context context, List<String> items, ItemClickListener clickListener){
inflater = LayoutInflater.from(context);
this.items = items;
this.clickListener = clickListener;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = inflater.inflate(R.layout.spinner_item, parent, false);
}
((TextView)convertView).setText(items.get(position));
convertView.setTag(position);
convertView.setClickable(false);
convertView.setLongClickable(false);
return convertView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
convertView = getView(position, convertView, parent);
convertView.setTag(position);
convertView.setOnClickListener(v -> {
if (clickListener != null) {
clickListener.onItemClicked(v);
}
});
convertView.setOnLongClickListener(v -> {
if (clickListener != null) {
clickListener.onItemLongClicked(v);
}
return true;
});
return convertView;
}
}
public interface ItemClickListener {
void onItemLongClicked(View view);
void onItemClicked(View view);
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
List<String> strings = new ArrayList<String>(){{
add("John");
add("James");
add("Jake");
add("Jane");
}};
CustomSpinner spinner = findViewById(R.id.spinner);
spinner.setAdapter(new SpinnerAdapter(this, strings, new ItemClickListener() {
@Override
public void onItemLongClicked(View view) {
spinner.onDetachedFromWindow();
final int pos = (int) view.getTag();
spinner.setSelection(pos);
Toast.makeText(MainActivity.this, "regular click: "+strings.get(pos), Toast.LENGTH_SHORT).show();
}
@Override
public void onItemClicked(View view) {
spinner.onDetachedFromWindow();
final int pos = (int) view.getTag();
spinner.setSelection(pos);
Toast.makeText(MainActivity.this, "long click: "+strings.get(pos), Toast.LENGTH_SHORT).show();
}
}));
}
}
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content">
</TextView>
layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
PagerSnapHelper snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
match_parent
следует использовать 0dp
- это значит, что будет использоваться все допустимое пространство, заданное ограничениями Expected BEGIN_ARRAY but was BEGIN_OBJECT
List<T>
, но был получен объект List
.private List<CityValue> city;
public List<CityValue> getCity() {
return city;
}
public void setCity(List<CityValue> city) {
this.city = city;
}
<style name="AppTheme" parent="YourTheme">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="materialButtonStyle">@style/systemButtonStyle</item> <!-- если используете MaterialComponents -->
<item name="buttonStyle">@style/systemButtonStyle</item> <!-- если используете AppCompat -->
</style>
<style name="systemButtonStyle" parent="Widget.MaterialComponents.Button">
<item name="android:background">@drawable/roundedbutton</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ff0000" />
<corners android:radius="8dp"/>
</shape>
Bundle bundle = new Bundle();
bundle.putInt("screen_id", screenId);
bundle.putInt("screen_title", screenTitleResource);
navController.navigate(R.id.infoFragment, bundle);
for(int i = 2; i < 100; ++i){
int count = 0;
for(int j = 2; j <=i && count < 2;++j){
if(i%j==0){
++count;
}
}
if(count<2)
System.out.println(i);
}