سؤال

بشكل عام معظم الوقت أعمل بقصد بدلا من جزء لأنني وجدت أنه معقد إلى حد ما.لدي فئة مع ليستفيو لإظهار بعض البيانات من صفيف وأريد تحويله في جزء تريد أيضا لتمرير إضافات في فئة مجزأة جديدة.

فئة ليستفيو:

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) للحصول على عرض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top