View Full Version : استفاده از چند لی یوت در یک اکتیویتی
sina4everafter
دوشنبه 02 تیر 1393, 10:05 صبح
سلام دوستان. ممنون میشم اگر راهنماییم کنید.
من چند تا لی یوت ایجاد کردم و می خوام با توجه به دکمه هایی که روی UI قرار داره، لی یوت ها تغییر کنن.
نحوه inflate کردن لی یوت چه طور انجام میشه. چون پرسیدم گفتن که باید با استفاده از inflate کردن این کار رو انجام بدیم.
ممنون میشم اگر راهنمایییم کنید.
sina4everafter
دوشنبه 02 تیر 1393, 14:09 عصر
دوستان من سه تا لی یوت ایجاد کردم که یکی از اونا اسمش main_layout است. دوتا لی یوت دیگه هم درست کردم که با اسم هاشون first , second هست.
من داخل main_layout یه FrameLayout ایجاد کردم و می خوام وقتی که کاربر مثلا روی دکمه اول کلیک کرد، لی یوت first و نشون بده و وقتی که روی دکمه دوم کلیک کرد لی یوت second و نشون بده.
یعنی لی یوت قبلی و Remove کنه و لی یوت بعدی و addView کنه. من نمی دونم که چطور باید این و بنویسم. خیلی راه ها رو امتحان کردم ولی نمیشه. اگر راهنمایی کنید ممنون میشم.
sina4everafter
دوشنبه 02 تیر 1393, 15:17 عصر
دوستان کسی نیست من و راهنمایی کنه. خیلی کارم گیره.ممنون.
SASAN_AH
دوشنبه 02 تیر 1393, 15:25 عصر
بنظرم سوالت گنگه!
اگه میخوای با کلیک توی هر لایوت بره به لایوت بعدی
(layout برای طراحی ومحیط گرافیکی برنامه شماست/قسمت java برای دستورات استفاده میشه/کلی)
برای اینکار دکمه رو تعریف کن و بعد بهش دستور بده که با کلیک بهش بره به اکتیویتی دلخواه!
با این کد دستور رو بده
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
sina4everafter
دوشنبه 02 تیر 1393, 15:31 عصر
نه دوست عزیز. به این صورت نمی خوام.
بینید من سه تا layout دارم. main_layout, firstLayout, second_layout. در فایل جاوا setContentView به لی یوت اصلی یعنی main_layout لینک دادم. دو تا دکمه هم روی این لی یوت اصلی ایجاد کردم و همچنین تو یه بخشی از لی یوت اصلی یک FrameLayout ایجاد کردم.می خوام مثلا وقتی روی دکمه First کلیک شد، لی یوت first_layout داخل اون FrameLayout یی که ایجاد کردم اجرا بشه، یا وقتی که روی دکمه Second کلیک شد، لی یوت second_layout داخل اون فریم لی یوت اجرا بشه.
خیلی سرچ کردم و باید LayoutInflater بنویسیم. اما هر طوری که می نویسم اجرا نمیشه.
SASAN_AH
دوشنبه 02 تیر 1393, 15:36 عصر
کد هاتون رو بزارید
خب اگر سه تا (layout (xml دارید پس باید 3 تا (.java ) هم داشته باشید برای دستورات هر لایوت.
sina4everafter
دوشنبه 02 تیر 1393, 15:53 عصر
این کد ها اجرا نمیشه.
package ir.blog.javaroid.approidtest;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
public class TestActivity extends Activity implements OnClickListener{
Button btn1, btn2;
LinearLayout lLayout_1st, lLayout_2nd;
FrameLayout frame;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
//---Code The Application---
lLayout_1st = (LinearLayout) findViewById(R.id.linearLayout_1st);
btn1.setOnClickListener(this);
}
@Override
public void onClick(View whiChBtn) {
switch (whiChBtn.getId()) {
case R.id.btn_1st:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
frame = (FrameLayout) inflater.inflate(R.layout.first_layout, null);
frame.addView(lLayout_1st);
break;
}
}
}
SASAN_AH
دوشنبه 02 تیر 1393, 16:27 عصر
بنظر بهتره از TAB استفاده کنی برای هر لایوتت توی FrameLayout
یعنی هر تب یکی از لایوت ها باشه
اینم یک نمونه (http://androidexample.com/Tab_Layout_|_TabBar_-_Android_Example/index.php?view=article_discription&aid=103&aaid=125) ببین بکارت میاد!:لبخند:
sina4everafter
دوشنبه 02 تیر 1393, 19:11 عصر
دوست عزیز این عکس و نگاه کن. قسمت زرد رنگ یه FrameLayout که می خوام وقتی کاربر روی اون دکمه های کناره صفحه کلیک می کنه این فریم لی یوت عوض بشه. من باید کدم و اینطوری بنویسم.
می تونی راهنمایی کنی؟
120426
harani
دوشنبه 02 تیر 1393, 19:52 عصر
در اکتویتی دقیقاً در زیر oncreate اکتیوتی متدی به نام setContectView وجود داره که درونش id لایوت رو میدین یک int تعریف کنید که با زدن هر دکمه این مقدار int برابر هر id که میخواین بشه سپس بگین secontentView آن مقدار int مربوطه رو بریزین تو جه کنید قبل از secontentview هیچ ui نباید صدا زده بشه . امیدوارم که توانسته باشم راهنماییتان کنم .
sina4everafter
دوشنبه 02 تیر 1393, 22:09 عصر
خب setContentView کل UI و عوض می کنه. اینکار و کردم. ولی من می خوام همون یه قسمت عوض بشه.
spiderman200700
سه شنبه 03 تیر 1393, 00:03 صبح
FrameLayout باید داخل main_layout تعریف بشه. و first_layout هم باید چیزی غیر از FrameLayout باشه(مثلا LinearLayout).
بعد به دو شکل میتونی View رو داخل frame_layout قرار بدی.
1.
FrameLayout frame = (FrameLayout) TestActivity.this.findViewById(R.id.frame_layout);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout lLayout_1st = (LinearLayout)inflater.inflate(R.layout.first_layo ut, null);
frame.removeAllViews();
frame.addView(lLayout_1st);
2.
LayoutInflator.from(TestActivity.this).inflate(R.l ayout.first_layout, frame, true);
امیدوارم این مشکلتو حل کنه
roohola2434
سه شنبه 03 تیر 1393, 07:33 صبح
سلام
من میخام اکتیویتیم اسکرول بشه بیاد پایین چه کنم؟
sina4everafter
سه شنبه 03 تیر 1393, 09:31 صبح
اول سپاس از دوست عزیزمون spiderman200700 که من و راهنمایی کرد. مشکلم حل شد.
در ضمن اون دوستی که می خوان صفحه اسکرول بشه داخل فایل xml این کد ها رو بنویسید صفحه قابلیت اسکرول پیدا می کنه.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/liLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>
</LinearLayout>
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.