تحويل النية إلى جزء في الروبوت
-
20-12-2019 - |
سؤال
بشكل عام معظم الوقت أعمل بقصد بدلا من جزء لأنني وجدت أنه معقد إلى حد ما.لدي فئة مع ليستفيو لإظهار بعض البيانات من صفيف وأريد تحويله في جزء تريد أيضا لتمرير إضافات في فئة مجزأة جديدة.
فئة ليستفيو:
public class MainActivity extends Activity {
ListView list;
String[] web = { "Google", "Twitter", "Windows", "Bing", "Itunes",
"Wordpress", "Drupal" };
Integer[] imageId = { R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CustomList adapter = new CustomList(MainActivity.this, web, imageId);
list = (ListView) findViewById(R.id.list);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this,
"You Clicked at " + web[+position], Toast.LENGTH_SHORT)
.show();
Intent i = new Intent(MainActivity.this, intent.class);
i.putExtra("name", web[+position]);
startActivity(i);
}
});
}
}
فئة قائمة مخصصة:
public class CustomList extends ArrayAdapter<String> {
private final Activity context;
private final String[] web;
private final Integer[] imageId;
public CustomList(Activity context, String[] web, Integer[] imageId) {
super(context, R.layout.list_single, web);
this.context = context;
this.web = web;
this.imageId = imageId;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(web[position]);
imageView.setImageResource(imageId[position]);
return rowView;
}
}
حصلت على فئة رئيسية مع ثلاث علامات تبويب تم إنشاؤها باستخدام جزء وفي هذه الفئة أود أن أضيف ليستفيو!
public class LayoutOne extends Fragment {
public static Fragment newInstance(Context context) {
LayoutOne f = new LayoutOne();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_one, null);
return root;
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
}
ما أريد القيام به هو إظهار ليستفيو في فئة جزء وعندما عنصر القائمة سوف يكون انقر أريد أن إطلاق نية جديدة لإظهار العنصر الذي تم النقر!
المحلول
إذا كنت ترغب في تمرير المعلمات إلى جزء ، فإن الممارسة الشائعة هي إنشاء طريقة ثابتة تنتج مثيلا للجزء الخاص بك مع معلمات معينة.لديك بالفعل newInstance
الطريقة ، الآن تحتاج فقط إلى إضافة معلمات إلى الوسائط وإرجاع الجزء.يجب عليك التحقق من الحجج في الخاص بك onCreateView
فيما يلي مثال على كيفية كتابة واحدة.
public class LayoutOne extends Fragment
{
public static Fragment newInstance(int someInt, String someString)
{
LayoutOne f = new LayoutOne();
Bundle args = new Bundle();
args.putInt("someInt", someInt);
args.putString("someString", someString);
f.setArguments(args);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_one, null);
Bundle args = getArguments();
//From here you would check to see if your arguments are present
//proceed accordingly
return root;
}
}
لحالتك المحددة ، هل يمكن أن تمر على طول مجموعة سلسلة وإضافته كوسيطة.
نأمل أن يساعد هذا.حظاً موفّقاً!
تحرير
المشكلة التي تواجهها هي أنك تقوم بإنشاء مثيل ListView
في الخاص بك Activity
عندما تكون في الواقع يجب أن تفعل ذلك في حياتك Fragment
.ليست هناك حاجة النوايا هنا ، تحتاج فقط للتأكد من أن هناك ListView
السمة للحصول عليها من التخطيط الذي نعلق على الخاص بك Fragment
.فيما يلي مثال صغير على كيفية عمل ذلك.
ملاحظة ، هذا الأسلوب يذهب في الخاص بك LayoutOne
فئة
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_one, null);
//Be sure to use the actual id of your list view
ListView lv = (ListView) root.findViewById(R.id.list_view_id);
//Make sure that you retrieve the values for 'web' and 'imageId' from
//the activity using the "newInstance" method.
CustomList adapter = new CustomList(getActivity(), web, imageId);
lv.setAdapter(adapter);
//From here, set your onClickListener and stuff as you did in your Activity
return root;
}
كملاحظة, Fragment
ق لم يكن لديك findViewById
الطريقة.عليك أن تسميها على View
أن كنت تضخيم ليكون تخطيطه ، لذلك في هذه الحالة كنت تضخم root
ثم يمكنك الاتصال root.findViewById(R.id.some_id)
للحصول على عرض.