Я новичок в android и пытаюсь создать активность, в которой есть фрагмент. Идея состоит в том, что у фрагмента есть 3 ImageButtons. Образ ImageButton, который вы нажмете, переместит его образ в действие, а затем отобразит его в другом фрагменте, созданном после onClick (полноэкранный ImageView) в рамках основного действия. Проблема в том, что я не могу понять, как передавать информацию. Я прочитал несколько заданных вопросов, которые уже были заданы, и перешел на сайт разработчиков Android, но чем больше я читаю, тем более запутанным становится. Я также сталкиваюсь с проблемой findViewById, говоря, что он не может решить этот метод. Я понятия не имею, почему это говорит мне об этом, и многое попробовало исправить, ничего не работает. Вот мой код, и любые предложения будут оценены.Pass ImageButton Value
Основная деятельность:
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity implements MainActivityFragment.CanPassData{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void passData(int value){
MainActivityFragment fragment = new MainActivityFragment();
fragment.setData(5);
getSupportFragmentManager().beginTransaction().add(R.id.fragment, fragment).commit();
//***Taken From Android Developer, I believe this is how you create a new fragment when you pass the data to the main activity****
if (fragment != null) {
fragment.getData();
} else {
MainActivityFragment newFragment = new MainActivityFragment();
Bundle args = new Bundle();
//******No idea what this is calling, pictureChosen and picture are default values taken from the website*******
args.putInt(MainActivityFragment.pictureChosen, picture);
newFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
//*****************************************************************************************
}
public void processData(){
MainActivityFragment fragment = (MainActivityFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
int value = fragment.getData();
}
}
Фрагмент:
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
public class MainActivityFragment extends Fragment implements View.OnClickListener {
private int data;
private CanPassData parent;
public interface CanPassData{
public void passData(int value);
}
public MainActivityFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//***findViewById is saying it cannot resolve below
setContentView(R.layout.fragment_main);
ImageButton button1 = (ImageButton) findViewById(R.id.imageButton);
ImageButton button2 = (ImageButton) findViewById(R.id.imageButton2);
ImageButton button3 = (ImageButton) findViewById(R.id.imageButton3);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
//******************************************************************************************
return inflater.inflate(R.layout.fragment_main, container, false);
}
public void onAttach(MainActivity activity){
parent = (CanPassData) activity;
}
public void setData(int value){
data = value;
}
//***onClick also has all findViewByID as cannot resolve method, and i'm not exactly sure what to do within each case, the stuff I have in there was also taken from android developer.
@Override
public void onClick(View v){
switch (v.getId()) {
case R.id.imageButton:
ImageView box = (ImageView)findViewByID(R.id.imageButton);
Drawable name = box.getBackground().getCurrent();
Intent intent = new Intent (this, newFragment.class);
intent.putExtra("com.example.coding.assignment2", name);
startActivity(intent);
break;
case R.id.imageButton2:
box = (ImageView)findViewByID(R.id.imageButton2);
name = box.getBackground().getCurrent();
intent = new Intent (this, newFragment.class);
intent.putExtra("com.example.coding.assignment2", name);
startActivity(intent);
break;
case R.id.imageButton3:
box = (ImageView)findViewByID(R.id.imageButton3);
name = box.getBackground().getCurrent();
intent = new Intent (this, newFragment.class);
intent.putExtra("com.example.coding.assignment2", name);
startActivity(intent);
break;
}
}
public void pushData(){
parent.passData(data);
}
public int getData(){
return data;
}
}
Многие из таких методов, как GetData и pushData Я точно не знаю, как использовать, чтобы получить информацию по основной деятельности , это была информация, предоставленная мне во время занятий. Я задаюсь вопросом, есть ли способ просто передать самозагружаемый сам, если он щелкнут, а затем назначьте его для ImageView в новом фрагменте, который отобразит его, охватывающий весь фрагмент. Мне сказали, что мне нужно сделать 2-й фрагмент xml, но сам файл java должен быть создан с помощью основного действия. Это верно?
лол. Это может сбивать с толку, поскольку есть несколько способов сделать это, чтобы что делать? Поскольку вы намерены перейти от фрагмента -> активность -> фрагмент, вы можете просто создать новый файл класса с именем (например) Globals, где вы определяете статическую растяжку или что угодно. Событие OnClick помещает изображение в статический глобальный drawable и bam! вы можете использовать его в любом месте без необходимости писать строки кода повсюду. Как его статический, вы захотите убедиться в утечке памяти и использовании, но ее повторное использование, хотя и повторное использование. – CmosBattery